diff options
author | Joachim Filip Ignacy Bartosik <jbartosik@gmail.com> | 2011-05-31 15:23:50 +0200 |
---|---|---|
committer | Joachim Filip Ignacy Bartosik <jbartosik@gmail.com> | 2011-06-03 19:36:23 +0200 |
commit | 00e319d4e4eec352830d88eb52f90aa6c14d3188 (patch) | |
tree | 363d2faa2e57e6b37555492a602da755ddf4f206 | |
parent | Proxy model (diff) | |
download | council-webapp-00e319d4e4eec352830d88eb52f90aa6c14d3188.tar.gz council-webapp-00e319d4e4eec352830d88eb52f90aa6c14d3188.tar.bz2 council-webapp-00e319d4e4eec352830d88eb52f90aa6c14d3188.zip |
Manage proxies with web app
-rw-r--r-- | site/app/models/agenda.rb | 1 | ||||
-rw-r--r-- | site/app/models/guest.rb | 3 | ||||
-rw-r--r-- | site/app/models/user.rb | 7 | ||||
-rw-r--r-- | site/app/viewhints/agenda_hints.rb | 2 | ||||
-rw-r--r-- | site/app/views/taglibs/application.dryml | 1 | ||||
-rw-r--r-- | site/app/views/taglibs/cards.dryml | 8 | ||||
-rw-r--r-- | site/app/views/users/show.dryml | 10 | ||||
-rw-r--r-- | site/features/proxies.feature | 43 | ||||
-rw-r--r-- | site/features/step_definitions/proxies_steps.rb | 28 | ||||
-rw-r--r-- | site/features/step_definitions/within_steps.rb | 1 | ||||
-rw-r--r-- | site/features/support/factories.rb | 2 | ||||
-rw-r--r-- | site/features/support/paths.rb | 6 |
12 files changed, 110 insertions, 2 deletions
diff --git a/site/app/models/agenda.rb b/site/app/models/agenda.rb index 44386e3..f1224ff 100644 --- a/site/app/models/agenda.rb +++ b/site/app/models/agenda.rb @@ -9,6 +9,7 @@ class Agenda < ActiveRecord::Base has_many :agenda_items has_many :participations + has_many :proxies lifecycle do state :open, :default => true diff --git a/site/app/models/guest.rb b/site/app/models/guest.rb index cce1de4..a6b93d5 100644 --- a/site/app/models/guest.rb +++ b/site/app/models/guest.rb @@ -8,4 +8,7 @@ class Guest < Hobo::Model::Guest false end + def can_appoint_a_proxy? + false + end end diff --git a/site/app/models/user.rb b/site/app/models/user.rb index 738165e..0cb75b4 100644 --- a/site/app/models/user.rb +++ b/site/app/models/user.rb @@ -52,4 +52,11 @@ class User < ActiveRecord::Base def view_permitted?(field) true end + + def can_appoint_a_proxy?(user) + return false unless council_member? + return false if user.council_member? + return false unless Proxy.council_member_is(self).agenda_is(Agenda.current).count == 0 + true + end end diff --git a/site/app/viewhints/agenda_hints.rb b/site/app/viewhints/agenda_hints.rb index 46daf34..93635b5 100644 --- a/site/app/viewhints/agenda_hints.rb +++ b/site/app/viewhints/agenda_hints.rb @@ -1,5 +1,5 @@ class AgendaHints < Hobo::ViewHints - children :agenda_items, :participations + children :agenda_items, :participations, :proxies end diff --git a/site/app/views/taglibs/application.dryml b/site/app/views/taglibs/application.dryml index 017831f..311631e 100644 --- a/site/app/views/taglibs/application.dryml +++ b/site/app/views/taglibs/application.dryml @@ -7,5 +7,6 @@ <include src="taglibs/auto/rapid/forms"/> <include src="taglibs/main_nav"/> +<include src="taglibs/cards"/> <set-theme name="clean"/> diff --git a/site/app/views/taglibs/cards.dryml b/site/app/views/taglibs/cards.dryml new file mode 100644 index 0000000..cb2a76d --- /dev/null +++ b/site/app/views/taglibs/cards.dryml @@ -0,0 +1,8 @@ +<def tag="card" for="Proxy"> + <card class="proxy" param="default" merge> + <header: param> + <h4 param="heading"><a><name:proxy/> for <name:council_member/></a></h4> + <delete-button label="Un-appoint proxy" if="&this.council_member_is?(current_user)"/> + </header:> + </card> +</def> diff --git a/site/app/views/users/show.dryml b/site/app/views/users/show.dryml new file mode 100644 index 0000000..b8ac059 --- /dev/null +++ b/site/app/views/users/show.dryml @@ -0,0 +1,10 @@ +<show-page> + <append-content-body:> + <form action="&create_proxy_path" if="¤t_user.can_appoint_a_proxy?(this)"> + <input type="hidden" name="proxy[council_member_id]" value="¤t_user.id"/> + <input type="hidden" name="proxy[proxy_id]" value="&this.id"/> + <input type="hidden" name="proxy[agenda_id]" value="&Agenda.current.id"/> + <submit label="Appoint as a proxy for next meeting"/> + </form> + </append-content-body:> +</show-page> diff --git a/site/features/proxies.feature b/site/features/proxies.feature new file mode 100644 index 0000000..a160e6e --- /dev/null +++ b/site/features/proxies.feature @@ -0,0 +1,43 @@ +Feature: Proxies + In order to check presence properly + I want the web application + To support proxies for council members + + Scenario: Appoint then un-appoint proxy + Given I am logged in as a council member + And an agenda + When I view profile of a regular user + And I press "Appoint as a proxy for next meeting" + + When I am on the current agenda page + Then I should see "User for Example" as proxy + + When I press "Un-appoint proxy" + And I confirm + And I am on the current agenda page + Then I should not see "User for Example" + + Scenario: Don't see useles proxy-management buttons as user who isn't a council member + Given I am logged in as example user + And an agenda + When I view profile of a regular user + Then I should not see "Appoint as a proxy" button + + Given someone appointed a proxy + When I am on the current agenda page + Then I should not see "Un-appoint prox" button + + Scenario: Don't see useles proxy-management buttons as user who is a council member + Given I am logged in as a council member + And an agenda + And a regular user + And someone appointed a proxy + + When I am on the "Member-who-appointed" show page + Then I should not see "Appoint as a proxy" button + + When I am on the current agenda page + Then I should not see "Un-appoint prox" button + + When I view old meeting for which I appointed a proxy + Then I should not see "Un-appoint prox" button diff --git a/site/features/step_definitions/proxies_steps.rb b/site/features/step_definitions/proxies_steps.rb new file mode 100644 index 0000000..44f27c0 --- /dev/null +++ b/site/features/step_definitions/proxies_steps.rb @@ -0,0 +1,28 @@ +Given /^a regular user$/ do + Factory(:user, :name => "User") +end + +When /^I view profile of a regular user$/ do + Given 'a regular user' + When 'I am on the "User" show page' +end + +Then /^I confirm$/ do + page.driver.browser.switch_to.alert.accept +end + +Then /^I should not see "([^"]*)" button$/ do |arg1| + page.all(:xpath, "//input[@type='submit'][@value='#{arg1}']").should be_empty +end + +Given /^someone appointed a proxy$/ do + Factory(:user, :council_member => true, :name => 'Member-who-appointed') + Factory(:proxy, :agenda => Agenda.current) +end + +When /^I view old meeting for which I appointed a proxy$/ do + a = Factory(:agenda, :state => 'old') + Factory(:proxy, :council_member => User.council_member_is(true).first, :agenda => a) + When "I am on #{a.id}th agenda page" +end + diff --git a/site/features/step_definitions/within_steps.rb b/site/features/step_definitions/within_steps.rb index 57bf030..821eb61 100644 --- a/site/features/step_definitions/within_steps.rb +++ b/site/features/step_definitions/within_steps.rb @@ -9,6 +9,7 @@ 'in the agendas collection' => '.collection.agendas', 'as empty collection message' => '.empty-collection-message', 'as meeting time' => '.meeting-time-view', + 'as proxy' => '.collection.proxies.proxies-collection', 'as the user nick' => '.user-irc-nick', 'as voting option' => '.collection.voting-options', 'as voting option description' => '.voting-option-description' diff --git a/site/features/support/factories.rb b/site/features/support/factories.rb new file mode 100644 index 0000000..300fee7 --- /dev/null +++ b/site/features/support/factories.rb @@ -0,0 +1,2 @@ +require File.expand_path("../../../spec/factories.rb", __FILE__) +require File.expand_path("../../../spec/support/users_factory.rb", __FILE__) diff --git a/site/features/support/paths.rb b/site/features/support/paths.rb index 6f8dad8..18d72ca 100644 --- a/site/features/support/paths.rb +++ b/site/features/support/paths.rb @@ -29,7 +29,11 @@ module NavigationHelpers when /the current items page/ current_items_path - # Add more mappings here. + when /the "([^\"]*)" show page/ + user_path(User.find_by_name($1)) + + when /([1-9]*)th agenda page/ + agenda_path(Agenda.find $1) # Add more mappings here. # Here is an example that pulls values out of the Regexp: # |