204 lines
6.6 KiB
JavaScript
204 lines
6.6 KiB
JavaScript
describe("app.pages.Profile", function(){
|
|
beforeEach(function(){
|
|
this.guid = 'abcdefg123'
|
|
this.profile = factory.profile({personId: this.guid})
|
|
app.page = this.page = new app.pages.Profile({model : this.profile });
|
|
this.stream = this.page.stream
|
|
});
|
|
|
|
it("fetches the profile of the user with the params from the router and assigns it as the model", function(){
|
|
var profile = new factory.profile()
|
|
spyOn(app.models.Profile, 'findByGuid').andReturn(profile)
|
|
var page = new app.pages.Profile({personId : 'jarjabinkisthebest' })
|
|
expect(app.models.Profile.findByGuid).toHaveBeenCalledWith('jarjabinkisthebest')
|
|
expect(page.model).toBe(profile)
|
|
})
|
|
|
|
it("passes the stream down to the canvas view", function(){
|
|
expect(this.page.canvasView.model).toBeDefined()
|
|
expect(this.page.canvasView.model).toBe(this.stream)
|
|
});
|
|
|
|
it("preloads the stream for the user", function(){
|
|
spyOn(this.stream, "preload")
|
|
|
|
window.preloads = {stream : JSON.stringify(["unicorns"]) }
|
|
|
|
new app.pages.Profile({stream : this.stream})
|
|
expect(this.stream.preload).toHaveBeenCalled()
|
|
|
|
delete window.preloads //cleanup
|
|
})
|
|
|
|
describe("rendering", function(){
|
|
context("with no posts", function(){
|
|
beforeEach(function(){
|
|
this.profile.set({"name" : "Alice Waters", person_id : "889"})
|
|
})
|
|
|
|
it("has a message that there are no posts", function(){
|
|
this.page.render()
|
|
expect(this.page.$("#canvas").text()).toBe("Alice Waters hasn't posted anything yet.")
|
|
})
|
|
|
|
it("tells you to post something if it's your profile", function(){
|
|
this.profile.set({is_own_profile : true})
|
|
this.page.render()
|
|
expect(this.page.$("#canvas").text()).toBe("Make something to start the magic.")
|
|
})
|
|
})
|
|
|
|
context("with a post", function(){
|
|
beforeEach(function(){
|
|
this.post = factory.post()
|
|
this.stream.add(this.post)
|
|
this.page.toggleEdit()
|
|
expect(this.page.editMode).toBeTruthy()
|
|
this.page.render()
|
|
});
|
|
|
|
context("profile control pane", function(){
|
|
it("shows the edit and create buttons if it's your profile", function() {
|
|
this.page.model.set({is_own_profile : true})
|
|
this.page.render()
|
|
expect(this.page.$("#profile-controls .control").length).toBe(2)
|
|
})
|
|
|
|
it("shows a follow button if showFollowButton returns true", function() {
|
|
spyOn(this.page, "showFollowButton").andReturn(true)
|
|
this.page.render()
|
|
expect(this.page.$("#follow-button").length).toBe(1)
|
|
})
|
|
|
|
it("doesn't show a follow button if showFollowButton returns false", function() {
|
|
spyOn(this.page, "showFollowButton").andReturn(false)
|
|
this.page.render()
|
|
expect(this.page.$("#follow-button").length).toBe(0)
|
|
})
|
|
})
|
|
|
|
context("clicking fav", function(){
|
|
beforeEach(function(){
|
|
spyOn(this.post, 'toggleFavorite')
|
|
spyOn($.fn, "isotope")
|
|
this.page.$(".content").click()
|
|
})
|
|
|
|
it("relayouts the page", function(){
|
|
expect($.fn.isotope).toHaveBeenCalledWith("reLayout")
|
|
})
|
|
|
|
it("toggles the favorite status on the model", function(){
|
|
expect(this.post.toggleFavorite).toHaveBeenCalled()
|
|
})
|
|
})
|
|
|
|
context("clicking delete", function(){
|
|
beforeEach(function () {
|
|
spyOn(window, "confirm").andReturn(true);
|
|
this.page.render()
|
|
})
|
|
|
|
it("kills the model", function(){
|
|
spyOn(this.post, "destroy")
|
|
this.page.$(".canvas-frame:first a.delete").click()
|
|
expect(this.post.destroy).toHaveBeenCalled()
|
|
})
|
|
|
|
it("removes the frame", function(){
|
|
spyOn($.fn, "remove").andCallThrough()
|
|
expect(this.page.$(".canvas-frame").length).toBe(1)
|
|
this.page.$(".canvas-frame:first a.delete").click()
|
|
waitsFor(function(){ return $.fn.remove.wasCalled })
|
|
runs(function(){ expect(this.page.$(".canvas-frame").length).toBe(0) })
|
|
})
|
|
})
|
|
})
|
|
});
|
|
|
|
describe("edit mode", function(){
|
|
describe("toggle edit", function(){
|
|
it("changes the page's global edit state", function(){
|
|
expect(this.page.editMode).toBeFalsy()
|
|
this.page.toggleEdit()
|
|
expect(this.page.editMode).toBeTruthy()
|
|
})
|
|
|
|
it("changes the page's class to 'edit-mode'", function(){
|
|
expect(this.page.$el).not.toHaveClass('edit-mode')
|
|
this.page.toggleEdit()
|
|
expect(this.page.$el).toHaveClass('edit-mode')
|
|
})
|
|
})
|
|
})
|
|
|
|
describe("composing", function(){
|
|
beforeEach(function(){
|
|
this.page.model.set({is_own_profile : true})
|
|
this.page.render()
|
|
|
|
/* stub navigation changes */
|
|
spyOn(app.router, "navigate")
|
|
})
|
|
|
|
describe("invoking the interaction", function(){
|
|
it("shows the publisher and disables the body from scrolling", function(){
|
|
expect(this.page.$("#composer")).toHaveClass('hidden')
|
|
this.page.$("#composer-button").click()
|
|
expect(this.page.$("#composer")).not.toHaveClass('hidden')
|
|
expect($("body")).toHaveClass('lock')
|
|
})
|
|
|
|
it("changes the URL", function(){
|
|
this.page.$("#composer-button").click()
|
|
expect(app.router.navigate).toHaveBeenCalled()
|
|
})
|
|
})
|
|
|
|
describe("revoking the interaction", function(){
|
|
beforeEach(function(){
|
|
/* invoke the composer */
|
|
this.page.$("#composer-button").click()
|
|
|
|
this.evt = Event
|
|
this.evt.keyCode = 28
|
|
})
|
|
|
|
it("changes the URL", function(){
|
|
$(window).trigger("keydown", this.evt)
|
|
expect(app.router.navigate).toHaveBeenCalled()
|
|
})
|
|
})
|
|
});
|
|
|
|
describe("followingEnabled", function(){
|
|
/* for legacy beta testers */
|
|
it("returns false if following_count is zero", function(){
|
|
loginAs({following_count : 0})
|
|
expect(this.page.followingEnabled()).toBeFalsy()
|
|
})
|
|
|
|
it("returns false if the user is not signed in", function(){
|
|
logout()
|
|
expect(this.page.followingEnabled()).toBeFalsy()
|
|
})
|
|
|
|
it("returns false if following_count is zero", function(){
|
|
loginAs({following_count : 1})
|
|
expect(this.page.followingEnabled()).toBeTruthy()
|
|
})
|
|
})
|
|
|
|
describe("followingEnabled", function(){
|
|
/* for legacy beta testers */
|
|
it("returns false if following_count is zero", function(){
|
|
app.currentUser.set({following_count : 0})
|
|
expect(this.page.followingEnabled()).toBeFalsy()
|
|
})
|
|
|
|
it("returns false if following_count is zero", function(){
|
|
app.currentUser.set({following_count : 1})
|
|
expect(this.page.followingEnabled()).toBeTruthy()
|
|
})
|
|
})
|
|
});
|