diff --git a/features/step_definitions/trumpeter_steps.rb b/features/step_definitions/trumpeter_steps.rb index a3b32a59f7bd52999f38fccd7ac242630e435d77..3464df20992d47a74d3a865c4682d0f8a24a8ce5 100644 --- a/features/step_definitions/trumpeter_steps.rb +++ b/features/step_definitions/trumpeter_steps.rb @@ -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 \ No newline at end of file diff --git a/features/trumpeter.feature b/features/trumpeter.feature index 17b07e384dd2ff3bad2f8a61651fa7506f227699..d60399688e180b63dfbd59ab500df8c897d05654 100644 --- a/features/trumpeter.feature +++ b/features/trumpeter.feature @@ -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 diff --git a/public/javascripts/app/forms/post_form_view.js b/public/javascripts/app/forms/post_form.js similarity index 87% rename from public/javascripts/app/forms/post_form_view.js rename to public/javascripts/app/forms/post_form.js index 3c2a84edb97d2f4b9d498afbce0e7e1d4f211f47..1f2a1fc5654deb41feff91e85ae6a7b6f2054d5f 100644 --- a/public/javascripts/app/forms/post_form_view.js +++ b/public/javascripts/app/forms/post_form.js @@ -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(){ diff --git a/public/javascripts/app/models/status_message.js b/public/javascripts/app/models/status_message.js index 50190883d1cde09dd9bed87a38be0ef2c1c44b46..e87cdda7fa9655f8afaac3c00603180ab2e4ab34 100644 --- a/public/javascripts/app/models/status_message.js +++ b/public/javascripts/app/models/status_message.js @@ -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] + } } }); diff --git a/public/javascripts/app/templates/aspects-dropdown.handlebars b/public/javascripts/app/templates/aspects-dropdown.handlebars index b1e6ae6d7f4879f00c7c1037f721df6fb1dbd328..14ed9dff653011c4368b46996ce0629991fafd1c 100644 --- a/public/javascripts/app/templates/aspects-dropdown.handlebars +++ b/public/javascripts/app/templates/aspects-dropdown.handlebars @@ -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> + <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> - {{#each current_user.aspects}} +<input type="hidden" class="aspect_ids"/> - <li> - <label class="checkbox"> - <input type="checkbox" value="{{id}}"/> {{name}} - </label> - </li> - {{/each}} - </ul> -</div> \ No newline at end of file +<!--<select multiple=multiple>--> + <!--{{#each current_user.aspects}}--> + <!--<option value="{{id}}"> {{name}}</option>--> + <!--{{/each}}--> +<!--</select>--> \ No newline at end of file diff --git a/public/javascripts/app/templates/post-form.handlebars b/public/javascripts/app/templates/post-form.handlebars index f57dd6c1bf2a5e165dc7319fd1b177e9ede34352..7e7cdc321ed7f2901a3905c28f9a979733c57686 100644 --- a/public/javascripts/app/templates/post-form.handlebars +++ b/public/javascripts/app/templates/post-form.handlebars @@ -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> diff --git a/public/javascripts/app/views/aspects_dropdown_view.js b/public/javascripts/app/views/aspects_dropdown_view.js index 805beb259ee8b45dc6f44920a48071eef59f6a4c..67af22f53290dba9fb2e789ad938364f8f65f704 100644 --- a/public/javascripts/app/views/aspects_dropdown_view.js +++ b/public/javascripts/app/views/aspects_dropdown_view.js @@ -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) + } }) \ No newline at end of file diff --git a/spec/javascripts/app/forms/post_form_spec.js b/spec/javascripts/app/forms/post_form_spec.js index a560c632266511c637328a04711ab31d85b65fb0..3161b681c59da3fc44718ede9dbdc6bdf848e2ab 100644 --- a/spec/javascripts/app/forms/post_form_spec.js +++ b/spec/javascripts/app/forms/post_form_spec.js @@ -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(){ diff --git a/spec/javascripts/app/views/aspects_dropdown_view_spec.js b/spec/javascripts/app/views/aspects_dropdown_view_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..9baca853ac37a1fb3625211164f1677a77ebce62 --- /dev/null +++ b/spec/javascripts/app/views/aspects_dropdown_view_spec.js @@ -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") + }) + }) + }) +}) \ No newline at end of file