DC DGtoggle between public an private

This commit is contained in:
Dennis Collinson 2012-03-07 16:12:24 -08:00
parent 3a47590d06
commit e77d7608cd
9 changed files with 107 additions and 31 deletions

View file

@ -5,3 +5,26 @@ end
When /^I write "([^"]*)"$/ do |text|
fill_in :text, :with => text
end
def aspects_dropdown
find(".dropdown-toggle")
end
def select_from_dropdown(option_text, dropdown)
dropdown.click
within ".dropdown-menu" do
link = find("a:contains('#{option_text}')")
link.should be_visible
link.click
end
#assert dropdown text is link
end
When /^I select "([^"]*)" in my aspects dropdown$/ do |title|
within ".aspect_selector" do
select_from_dropdown(title, aspects_dropdown)
end
end
Then /^"([^"]*)" should be a (limited|public) post in my stream$/ do |post_text, scope|
find_post_by_text(post_text).find(".post_scope").text.should =~ /#{scope}/i
end

View file

@ -4,14 +4,19 @@ Feature: Creating a new post
Given a user with username "bob"
And I sign in as "bob@bob.bob"
And I trumpet
And I write "Rectangles are awesome"
Scenario: Posting a public message
And I write "Rectangles are awesome"
When I select "Public" in my aspects dropdown
When I press "Share"
When I go to "/stream"
Then I should see "Rectangles are awesome" as the first post in my stream
And "Rectangles are awesome" should be a public post in my stream
Scenario: Posting to Aspects
When I select "generic" in my aspects dropdown
And I write "This is super skrunkle"
When I select "All Aspects" in my aspects dropdown
And I press "Share"
Then I should see "Rectangles are awesome" as a limited post in my stream
When I go to "/stream"
Then I should see "This is super skrunkle" as the first post in my stream
Then "This is super skrunkle" should be a limited post in my stream

View file

@ -7,7 +7,7 @@ app.forms.Post = app.forms.Base.extend({
formAttrs : {
".text" : "text",
// ".aspect_ids" : "aspect_ids"
"input.aspect_ids" : "aspect_ids"
},
initialize : function(){

View file

@ -4,8 +4,11 @@ app.models.StatusMessage = app.models.Post.extend({
},
mungeAndSave : function(){
var mungedAttrs = {status_message : _.clone(this.attributes), aspect_ids : ["public"]}
var mungedAttrs = {status_message : _.clone(this.attributes), aspect_ids : mungeAspects(this.get("aspect_ids"))}
this.save(mungedAttrs)
function mungeAspects (value){
return [value]
}
}
});

View file

@ -1,25 +1,18 @@
<div class="btn-group aspect_ids check-group">
<div class="btn-group aspects_dropdown check-group">
<a class="btn btn-info dropdown-toggle" data-toggle="dropdown" href="#">All Aspects <span class="caret"></span></a>
<ul class="dropdown-menu">
<li>
<label class="checkbox">
<input type="checkbox" value="public"/>Public
</label>
</li>
<li>
<label class="checkbox">
<input type="checkbox" value="all"/>All Aspects
</label>
</li>
<li class="divider"></li>
{{#each current_user.aspects}}
<li>
<label class="checkbox">
<input type="checkbox" value="{{id}}"/> {{name}}
</label>
</li>
{{/each}}
<li><a href="#" class="public" data-visibility="public">Public</a></li>
<li><a href="#" class="all-aspects" data-visibility="all-aspects">All Aspects</a></li>
<!--<li class="divider"></li>-->
<!--<li><a href="#" data-value="custom">Custom</a></li>-->
</ul>
</div>
</div>
<input type="hidden" class="aspect_ids"/>
<!--<select multiple=multiple>-->
<!--{{#each current_user.aspects}}-->
<!--<option value="{{id}}"> {{name}}</option>-->
<!--{{/each}}-->
<!--</select>-->

View file

@ -2,10 +2,10 @@
<div class='span12'>
<form class="new-post well">
<label>text<textarea class="text"/></label>
<input type="submit" class="btn-primary" value="Share"></input>
<div class="aspect_selector"/>
<br/>
<input type="submit" class="btn-primary" value="Share"></input>
</form>
</div>
</div>

View file

@ -1,3 +1,28 @@
app.views.AspectsDropdown = app.views.Base.extend({
templateName : "aspects-dropdown"
templateName : "aspects-dropdown",
events : {
"click .dropdown-menu a" : "setVisibility"
},
setVisibility : function(evt){
var linkVisibility = $(evt.target).data("visibility")
, visibilityCallbacks = {
'public' : setPublic,
'all-aspects' : setPrivate
}
visibilityCallbacks[linkVisibility].call(this)
function setPublic (){
this.setAspectIds("public")
}
function setPrivate (){
this.setAspectIds("all_aspects")
}
},
setAspectIds : function(val){
this.$("input.aspect_ids").val(val)
}
})

View file

@ -12,11 +12,13 @@ describe("app.forms.Post", function(){
describe("submitting a valid form", function(){
beforeEach(function(){
this.view.$("form .text").val("Oh My")
this.view.$("form .aspect_ids").val("public")
})
it("instantiates a post on form submit", function(){
this.view.$("form").submit()
expect(this.view.model.get("text")).toBe("Oh My")
expect(this.view.model.get("aspect_ids")).toBe("public")
})
it("triggers a 'setFromForm' event", function(){

View file

@ -0,0 +1,25 @@
describe("app.views.AspectsDropdown", function(){
beforeEach(function(){
this.view = new app.views.AspectsDropdown
})
describe("rendering", function(){
beforeEach(function(){
this.view.render()
})
describe("selecting Public", function(){
it("calls set aspect_ids to 'public'", function(){
this.view.$("a[data-visibility='public']").click()
expect(this.view.$("input.aspect_ids").val()).toBe("public")
})
})
describe("selecting All Aspects", function(){
it("calls set aspect_ids to 'all'", function(){
this.view.$("a[data-visibility='all-aspects']").click()
expect(this.view.$("input.aspect_ids").val()).toBe("all_aspects")
})
})
})
})