saasy 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +114 -0
- data/Gemfile +26 -0
- data/README.md +118 -0
- data/Rakefile +38 -0
- data/app/controllers/accounts_controller.rb +68 -0
- data/app/controllers/billings_controller.rb +25 -0
- data/app/controllers/invitations_controller.rb +65 -0
- data/app/controllers/memberships_controller.rb +45 -0
- data/app/controllers/plans_controller.rb +24 -0
- data/app/controllers/profiles_controller.rb +19 -0
- data/app/helpers/limits_helper.rb +13 -0
- data/app/mailers/billing_mailer.rb +53 -0
- data/app/mailers/invitation_mailer.rb +18 -0
- data/app/models/invitation.rb +113 -0
- data/app/models/limit.rb +49 -0
- data/app/models/membership.rb +26 -0
- data/app/models/permission.rb +19 -0
- data/app/models/signup.rb +163 -0
- data/app/views/accounts/_account.html.erb +9 -0
- data/app/views/accounts/_blank_slate.html.erb +6 -0
- data/app/views/accounts/_projects.html.erb +12 -0
- data/app/views/accounts/_subnav.html.erb +10 -0
- data/app/views/accounts/edit.html.erb +34 -0
- data/app/views/accounts/index.html.erb +9 -0
- data/app/views/accounts/new.html.erb +36 -0
- data/app/views/billing_mailer/completed_trial.text.erb +13 -0
- data/app/views/billing_mailer/expiring_trial.text.erb +15 -0
- data/app/views/billing_mailer/new_unactivated.text.erb +1 -0
- data/app/views/billing_mailer/problem.html.erb +13 -0
- data/app/views/billing_mailer/problem.text.erb +14 -0
- data/app/views/billing_mailer/receipt.html.erb +41 -0
- data/app/views/billing_mailer/receipt.text.erb +25 -0
- data/app/views/billings/_form.html.erb +8 -0
- data/app/views/billings/edit.html.erb +13 -0
- data/app/views/billings/show.html.erb +29 -0
- data/app/views/invitation_mailer/invitation.text.erb +6 -0
- data/app/views/invitations/new.html.erb +17 -0
- data/app/views/invitations/show.html.erb +22 -0
- data/app/views/layouts/saucy.html.erb +36 -0
- data/app/views/limits/_meter.html.erb +13 -0
- data/app/views/memberships/edit.html.erb +21 -0
- data/app/views/memberships/index.html.erb +17 -0
- data/app/views/plans/_plan.html.erb +32 -0
- data/app/views/plans/_terms.html.erb +15 -0
- data/app/views/plans/edit.html.erb +33 -0
- data/app/views/plans/index.html.erb +12 -0
- data/app/views/profiles/_inputs.html.erb +5 -0
- data/app/views/profiles/edit.html.erb +36 -0
- data/app/views/projects/_form.html.erb +36 -0
- data/app/views/projects/edit.html.erb +22 -0
- data/app/views/projects/index.html.erb +28 -0
- data/app/views/projects/new.html.erb +13 -0
- data/app/views/projects/show.html.erb +0 -0
- data/app/views/shared/_project_dropdown.html.erb +55 -0
- data/app/views/shared/_saucy_javascript.html.erb +33 -0
- data/config/locales/en.yml +37 -0
- data/config/routes.rb +19 -0
- data/features/run_features.feature +83 -0
- data/features/step_definitions/clearance_steps.rb +45 -0
- data/features/step_definitions/rails_steps.rb +73 -0
- data/features/step_definitions/saucy_steps.rb +8 -0
- data/features/support/env.rb +4 -0
- data/features/support/file.rb +11 -0
- data/lib/generators/saucy/base.rb +18 -0
- data/lib/generators/saucy/features/features_generator.rb +91 -0
- data/lib/generators/saucy/features/templates/README +3 -0
- data/lib/generators/saucy/features/templates/factories.rb +71 -0
- data/lib/generators/saucy/features/templates/features/edit_profile.feature +9 -0
- data/lib/generators/saucy/features/templates/features/edit_project_permissions.feature +37 -0
- data/lib/generators/saucy/features/templates/features/edit_user_permissions.feature +47 -0
- data/lib/generators/saucy/features/templates/features/manage_account.feature +35 -0
- data/lib/generators/saucy/features/templates/features/manage_billing.feature +93 -0
- data/lib/generators/saucy/features/templates/features/manage_plan.feature +143 -0
- data/lib/generators/saucy/features/templates/features/manage_projects.feature +139 -0
- data/lib/generators/saucy/features/templates/features/manage_users.feature +142 -0
- data/lib/generators/saucy/features/templates/features/new_account.feature +33 -0
- data/lib/generators/saucy/features/templates/features/project_dropdown.feature +77 -0
- data/lib/generators/saucy/features/templates/features/sign_up.feature +32 -0
- data/lib/generators/saucy/features/templates/features/sign_up_paid.feature +65 -0
- data/lib/generators/saucy/features/templates/features/trial_plans.feature +82 -0
- data/lib/generators/saucy/features/templates/step_definitions/account_steps.rb +30 -0
- data/lib/generators/saucy/features/templates/step_definitions/braintree_steps.rb +25 -0
- data/lib/generators/saucy/features/templates/step_definitions/cron_steps.rb +23 -0
- data/lib/generators/saucy/features/templates/step_definitions/email_steps.rb +40 -0
- data/lib/generators/saucy/features/templates/step_definitions/factory_girl_steps.rb +1 -0
- data/lib/generators/saucy/features/templates/step_definitions/html_steps.rb +51 -0
- data/lib/generators/saucy/features/templates/step_definitions/plan_steps.rb +16 -0
- data/lib/generators/saucy/features/templates/step_definitions/project_steps.rb +4 -0
- data/lib/generators/saucy/features/templates/step_definitions/session_steps.rb +37 -0
- data/lib/generators/saucy/features/templates/step_definitions/user_steps.rb +100 -0
- data/lib/generators/saucy/features/templates/support/braintree.rb +5 -0
- data/lib/generators/saucy/install/install_generator.rb +40 -0
- data/lib/generators/saucy/install/templates/controllers/projects_controller.rb +3 -0
- data/lib/generators/saucy/install/templates/create_saucy_tables.rb +115 -0
- data/lib/generators/saucy/install/templates/models/account.rb +3 -0
- data/lib/generators/saucy/install/templates/models/plan.rb +3 -0
- data/lib/generators/saucy/install/templates/models/project.rb +3 -0
- data/lib/generators/saucy/specs/specs_generator.rb +20 -0
- data/lib/generators/saucy/specs/templates/support/braintree.rb +5 -0
- data/lib/generators/saucy/views/views_generator.rb +23 -0
- data/lib/saucy.rb +10 -0
- data/lib/saucy/account.rb +132 -0
- data/lib/saucy/account_authorization.rb +67 -0
- data/lib/saucy/configuration.rb +29 -0
- data/lib/saucy/engine.rb +35 -0
- data/lib/saucy/fake_braintree.rb +134 -0
- data/lib/saucy/layouts.rb +36 -0
- data/lib/saucy/plan.rb +54 -0
- data/lib/saucy/project.rb +125 -0
- data/lib/saucy/projects_controller.rb +94 -0
- data/lib/saucy/railties/tasks.rake +28 -0
- data/lib/saucy/routing_extensions.rb +121 -0
- data/lib/saucy/subscription.rb +237 -0
- data/lib/saucy/user.rb +30 -0
- data/spec/controllers/accounts_controller_spec.rb +228 -0
- data/spec/controllers/application_controller_spec.rb +32 -0
- data/spec/controllers/invitations_controller_spec.rb +215 -0
- data/spec/controllers/memberships_controller_spec.rb +117 -0
- data/spec/controllers/plans_controller_spec.rb +13 -0
- data/spec/controllers/profiles_controller_spec.rb +48 -0
- data/spec/controllers/projects_controller_spec.rb +216 -0
- data/spec/environment.rb +95 -0
- data/spec/layouts_spec.rb +21 -0
- data/spec/mailers/billing_mailer_spec.rb +68 -0
- data/spec/mailers/invitiation_mailer_spec.rb +19 -0
- data/spec/models/account_spec.rb +218 -0
- data/spec/models/invitation_spec.rb +320 -0
- data/spec/models/limit_spec.rb +70 -0
- data/spec/models/membership_spec.rb +37 -0
- data/spec/models/permission_spec.rb +30 -0
- data/spec/models/plan_spec.rb +81 -0
- data/spec/models/project_spec.rb +223 -0
- data/spec/models/signup_spec.rb +177 -0
- data/spec/models/subscription_spec.rb +481 -0
- data/spec/models/user_spec.rb +72 -0
- data/spec/route_extensions_spec.rb +51 -0
- data/spec/saucy_spec.rb +62 -0
- data/spec/scaffold/config/routes.rb +5 -0
- data/spec/spec_helper.rb +39 -0
- data/spec/support/authentication_helpers.rb +81 -0
- data/spec/support/authorization_helpers.rb +56 -0
- data/spec/support/braintree.rb +7 -0
- data/spec/support/clearance_matchers.rb +55 -0
- data/spec/support/notifications.rb +57 -0
- data/spec/views/accounts/_account.html.erb_spec.rb +37 -0
- metadata +325 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
Feature: Manage Billing
|
2
|
+
As a admin user
|
3
|
+
I want to be able to manage my billing information
|
4
|
+
So that my account can stay up to date and in good standing
|
5
|
+
|
6
|
+
Scenario: Update the billing information on an account with a paid plan
|
7
|
+
Given a paid plan exists with a name of "Paid"
|
8
|
+
And the following account exists:
|
9
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
10
|
+
| Test | test | name: Paid | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
11
|
+
And I have signed in with "joe@example.com/test"
|
12
|
+
And "joe@example.com" is an admin of the "Test" account
|
13
|
+
When I go to the billing page for the "Test" account
|
14
|
+
Then I should see "card ending in 5555"
|
15
|
+
And I should see "There have been no invoices yet."
|
16
|
+
And I follow "Change" within ".current_credit_card"
|
17
|
+
|
18
|
+
Then the "Cardholder name" field should contain "Joe Smith"
|
19
|
+
And the "Billing email" field should contain "jsmith@example.com"
|
20
|
+
And the "Card number" field should have nothing in it
|
21
|
+
And the "Verification code" field should have nothing in it
|
22
|
+
And the "Expiration month" field should contain "01"
|
23
|
+
And the "Expiration year" field should contain "2015"
|
24
|
+
|
25
|
+
And I fill in "Cardholder name" with "Ralph Robot"
|
26
|
+
And I fill in "Billing email" with "accounting@example.com"
|
27
|
+
And I fill in "Card number" with "4111111111111111"
|
28
|
+
And I fill in "Verification code" with "123"
|
29
|
+
And I select "March" from "Expiration month"
|
30
|
+
And I select "2020" from "Expiration year"
|
31
|
+
And I press "Update"
|
32
|
+
Then I should see "updated successfully"
|
33
|
+
Then I should see "card ending in 1111"
|
34
|
+
|
35
|
+
Scenario: Be forced to update the billing information on an account with a paid plan that is past due
|
36
|
+
Given a paid plan exists with a name of "Paid"
|
37
|
+
And the following account exists:
|
38
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
39
|
+
| Test | test | name: Paid | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
40
|
+
And the "Test" account is past due
|
41
|
+
And I have signed in with "joe@example.com/test"
|
42
|
+
And "joe@example.com" is an admin of the "Test" account
|
43
|
+
When I go to the settings page for the "Test" account
|
44
|
+
Then I should be on the billing page for the "Test" account
|
45
|
+
And I should see "There was an issue processing the credit card you have on file. Please update your credit card information."
|
46
|
+
|
47
|
+
Scenario: Be told to have an admin update the billing information on an account with a paid plan that is past due
|
48
|
+
Given a paid plan exists with a name of "Paid"
|
49
|
+
And the following account exists:
|
50
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
51
|
+
| Test | test | name: Paid | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
52
|
+
And the "Test" account is past due
|
53
|
+
And the following projects exist:
|
54
|
+
| name | account |
|
55
|
+
| Project | name: Test |
|
56
|
+
| Project2 | name: Test |
|
57
|
+
And the following user exists:
|
58
|
+
| email |
|
59
|
+
| jsmith@example.com |
|
60
|
+
And "jsmith@example.com" is a member of the "Project" project
|
61
|
+
And I sign in as "jsmith@example.com"
|
62
|
+
When I go to the accounts page
|
63
|
+
Then I should see "There was an issue processing the credit card on file for this account. Please have an administrator on the account update the credit card information."
|
64
|
+
Then I should be on the billing page for the "Test" account
|
65
|
+
|
66
|
+
Scenario: View past credit card charges
|
67
|
+
Given a paid plan exists with a name of "Paid"
|
68
|
+
And the following account exists:
|
69
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
70
|
+
| Test | test | name: Paid | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
71
|
+
And the following transaction exist for the "Test" account:
|
72
|
+
| status | amount | created_at |
|
73
|
+
| Settled | 20.00 | July 1, 2010 |
|
74
|
+
| Settled | 5.00 | August 1, 2010 |
|
75
|
+
And I have signed in with "joe@example.com/test"
|
76
|
+
And "joe@example.com" is an admin of the "Test" account
|
77
|
+
When I go to the billing page for the "Test" account
|
78
|
+
Then I should see "Your Invoices"
|
79
|
+
And I should see "07/01/10 $20"
|
80
|
+
And I should see "08/01/10 $5"
|
81
|
+
|
82
|
+
Scenario: Navigate back to the main settings page
|
83
|
+
Given a paid plan exists with a name of "Paid"
|
84
|
+
And the following account exists:
|
85
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
86
|
+
| Test | test | name: Paid | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
87
|
+
And I have signed in with "joe@example.com/test"
|
88
|
+
And "joe@example.com" is an admin of the "Test" account
|
89
|
+
When I go to the billing page for the "Test" account
|
90
|
+
And I follow "Change"
|
91
|
+
And I follow "Billing"
|
92
|
+
And I follow "Account Info"
|
93
|
+
Then I should be on the settings page for the "Test" account
|
@@ -0,0 +1,143 @@
|
|
1
|
+
Feature: Manage Plan
|
2
|
+
As a admin user
|
3
|
+
I want to be able to upgrade and downgrade my account
|
4
|
+
So that I can pay what I want and get the features I want
|
5
|
+
|
6
|
+
Scenario: Change the plan to another paid plan on an account with a paid plan
|
7
|
+
Given a paid plan exists with a name of "Basic"
|
8
|
+
And a paid plan exists with a name of "Premium"
|
9
|
+
And the following account exists:
|
10
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
11
|
+
| Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
12
|
+
And I have signed in with "joe@example.com/test"
|
13
|
+
And "joe@example.com" is an admin of the "Test" account
|
14
|
+
When I go to the settings page for the "Test" account
|
15
|
+
Then I should see "Your Plan"
|
16
|
+
And I should not see "Billing Information"
|
17
|
+
And I should see "Basic"
|
18
|
+
And I follow "Upgrade"
|
19
|
+
Then I should see "Upgrade Your Plan"
|
20
|
+
When I choose the "Premium" plan
|
21
|
+
And I press "Upgrade"
|
22
|
+
Then I should see "Plan changed successfully"
|
23
|
+
Then I should see "Premium"
|
24
|
+
|
25
|
+
Scenario: Change the plan from free to paid
|
26
|
+
Given a plan exists with a name of "Free"
|
27
|
+
And a paid plan exists with a name of "Basic"
|
28
|
+
And the following account exists:
|
29
|
+
| name | keyword | plan |
|
30
|
+
| Test | test | name: Free |
|
31
|
+
And I have signed in with "joe@example.com/test"
|
32
|
+
And "joe@example.com" is an admin of the "Test" account
|
33
|
+
When I go to the settings page for the "Test" account
|
34
|
+
Then I should not see "Billing" within ".subnav"
|
35
|
+
Then I should see "Your Plan"
|
36
|
+
And I follow "Upgrade"
|
37
|
+
Then I should see "Upgrade Your Plan"
|
38
|
+
When I choose the "Basic" plan
|
39
|
+
Then I should see "Billing Information"
|
40
|
+
And I fill in "Cardholder name" with "Ralph Robot"
|
41
|
+
And I fill in "Billing email" with "accounting@example.com"
|
42
|
+
And I fill in "Card number" with "4111111111111111"
|
43
|
+
And I fill in "Verification code" with "123"
|
44
|
+
And I select "March" from "Expiration month"
|
45
|
+
And I select "2020" from "Expiration year"
|
46
|
+
When I press "Upgrade"
|
47
|
+
Then I should see "Plan changed successfully"
|
48
|
+
And I should see "Basic"
|
49
|
+
And I follow "Billing"
|
50
|
+
Then I should see "card ending in 1111"
|
51
|
+
|
52
|
+
Scenario: Change the plan from free to paid with an invalid credit card number
|
53
|
+
Given that the credit card "4111112" is invalid
|
54
|
+
And a plan exists with a name of "Free"
|
55
|
+
And a paid plan exists with a name of "Basic"
|
56
|
+
And the following account exists:
|
57
|
+
| name | keyword | plan |
|
58
|
+
| Test | test | name: Free |
|
59
|
+
And I have signed in with "joe@example.com/test"
|
60
|
+
And "joe@example.com" is an admin of the "Test" account
|
61
|
+
When I go to the settings page for the "Test" account
|
62
|
+
Then I should not see "Billing" within ".subnav"
|
63
|
+
Then I should see "Your Plan"
|
64
|
+
And I follow "Upgrade"
|
65
|
+
When I choose the "Basic" plan
|
66
|
+
Then I should see "Billing Information"
|
67
|
+
And I fill in "Cardholder name" with "Ralph Robot"
|
68
|
+
And I fill in "Billing email" with "accounting@example.com"
|
69
|
+
And I fill in "Card number" with "4111112"
|
70
|
+
And I fill in "Verification code" with "123"
|
71
|
+
And I select "March" from "Expiration month"
|
72
|
+
And I select "2020" from "Expiration year"
|
73
|
+
When I press "Upgrade"
|
74
|
+
Then I should not see "Plan changed successfully"
|
75
|
+
And "Card number" should have the error "is invalid"
|
76
|
+
|
77
|
+
Scenario: Change the plan to a free on an account with a paid plan
|
78
|
+
Given a paid plan exists with a name of "Basic"
|
79
|
+
And a plan exists with a name of "Free"
|
80
|
+
And the following account exists:
|
81
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
82
|
+
| Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
83
|
+
And I have signed in with "joe@example.com/test"
|
84
|
+
And "joe@example.com" is an admin of the "Test" account
|
85
|
+
When I go to the settings page for the "Test" account
|
86
|
+
Then I should see "Your Plan"
|
87
|
+
And I should not see "Billing Information"
|
88
|
+
And I should see "Basic"
|
89
|
+
And I follow "Upgrade"
|
90
|
+
Then I should see "Upgrade Your Plan"
|
91
|
+
When I choose the "Free" plan
|
92
|
+
And I press "Upgrade"
|
93
|
+
Then I should see "Plan changed successfully"
|
94
|
+
Then I should see "Free"
|
95
|
+
|
96
|
+
Scenario: Attempting to downgrade when beyond the limits
|
97
|
+
Given a paid plan exists with a name of "Basic"
|
98
|
+
And a plan exists with a name of "Free"
|
99
|
+
And the following account exists:
|
100
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
101
|
+
| Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
102
|
+
And the following limits exist:
|
103
|
+
| plan | name | value | value_type |
|
104
|
+
| name: Basic | users | 1 | number |
|
105
|
+
| name: Free | users | 0 | number |
|
106
|
+
| name: Basic | projects | 5 | number |
|
107
|
+
| name: Free | projects | 1 | number |
|
108
|
+
| name: Basic | ssl | 1 | boolean |
|
109
|
+
| name: Free | ssl | 0 | boolean |
|
110
|
+
And I have signed in with "joe@example.com/test"
|
111
|
+
And "joe@example.com" is an admin of the "Test" account
|
112
|
+
When I go to the settings page for the "Test" account
|
113
|
+
Then I should see "Your Plan"
|
114
|
+
And I should not see "Billing Information"
|
115
|
+
And I should see "Basic"
|
116
|
+
And I follow "Upgrade"
|
117
|
+
Then I should see "Upgrade Your Plan"
|
118
|
+
And the "Free" plan should be disabled
|
119
|
+
And I should see "Too big for Free."
|
120
|
+
And I should see "1 user" within ".basic"
|
121
|
+
And I should see "0 users" within ".free"
|
122
|
+
And I should see "1 project" within ".free"
|
123
|
+
And I should see "5 projects" within ".basic"
|
124
|
+
And I should see "ssl" within ".basic"
|
125
|
+
And I should not see "ssl" within ".free"
|
126
|
+
|
127
|
+
Scenario: Viewing current usage
|
128
|
+
Given a paid plan exists with a name of "Basic"
|
129
|
+
And the following account exists:
|
130
|
+
| name | keyword | plan | cardholder_name | billing_email | card_number | verification_code | expiration_month | expiration_year |
|
131
|
+
| Test | test | name: Basic | Joe Smith | jsmith@example.com | 4111111111115555 | 122 | 01 | 2015 |
|
132
|
+
And the following limits exist:
|
133
|
+
| plan | name | value | value_type |
|
134
|
+
| name: Basic | users | 1 | number |
|
135
|
+
| name: Basic | projects | 5 | number |
|
136
|
+
| name: Basic | ssl | 1 | boolean |
|
137
|
+
And I have signed in with "joe@example.com/test"
|
138
|
+
And "joe@example.com" is an admin of the "Test" account
|
139
|
+
When I go to the settings page for the "Test" account
|
140
|
+
Then I should see "1/1" within ".users.meter"
|
141
|
+
And I should see "100.000%" within ".users.meter"
|
142
|
+
And I should see "0/5" within ".projects.meter"
|
143
|
+
And I should see "0.000%" within ".projects.meter"
|
@@ -0,0 +1,139 @@
|
|
1
|
+
Feature: Manage Projects
|
2
|
+
As a admin user
|
3
|
+
I want to be able to manage projects
|
4
|
+
In order to have a project for each of my software applications
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given the following accounts exist:
|
8
|
+
| name | keyword |
|
9
|
+
| Test | test |
|
10
|
+
| Another | another |
|
11
|
+
And the following user exists:
|
12
|
+
| name | email |
|
13
|
+
| Joe User | joe@example.com |
|
14
|
+
And "joe@example.com" is an admin of the "Test" account
|
15
|
+
And I sign in as "joe@example.com"
|
16
|
+
|
17
|
+
Scenario: Create new project with one account
|
18
|
+
When I go to the projects page for the "Test" account
|
19
|
+
And I follow "New Project"
|
20
|
+
Then the page should not include "select#project_account_id"
|
21
|
+
And the "Joe User" checkbox should be checked
|
22
|
+
When I fill in "Name" with "Project 1"
|
23
|
+
And I fill in "Keyword" with "project1"
|
24
|
+
And I should see "http://www.example.com/accounts/test/projects/keyword"
|
25
|
+
And I press "Create"
|
26
|
+
And I go to the projects page for the "Test" account
|
27
|
+
Then I should see "Project 1" within "ul.projects"
|
28
|
+
|
29
|
+
Scenario: Creating new project with two accounts shows the account selection
|
30
|
+
Given "joe@example.com" is an admin of the "Another" account
|
31
|
+
When I go to the projects page for the "Test" account
|
32
|
+
And I follow "New Project"
|
33
|
+
Then the page should include "select#project_account_id"
|
34
|
+
|
35
|
+
Scenario: Edit a project
|
36
|
+
Given the following project exists:
|
37
|
+
| account | name |
|
38
|
+
| name: Test | Project 1 |
|
39
|
+
When I go to the projects page for the "Test" account
|
40
|
+
And I follow "Project 1" within "ul.projects"
|
41
|
+
And I fill in "Name" with "Name Change"
|
42
|
+
And I press "Update"
|
43
|
+
Then I should see "Name Change"
|
44
|
+
|
45
|
+
@javascript
|
46
|
+
Scenario: Move a project
|
47
|
+
Given "joe@example.com" is an admin of the "Another" account
|
48
|
+
And the following projects exist:
|
49
|
+
| account | name |
|
50
|
+
| name: Test | Project 1 |
|
51
|
+
When I go to the projects page for the "Test" account
|
52
|
+
And I follow "Project 1" within "ul.projects"
|
53
|
+
And I select "Another" from "Account"
|
54
|
+
And I press "Update"
|
55
|
+
And I should see "Project 1" within "ul.projects"
|
56
|
+
Then I should be on the projects page for the "Another" account
|
57
|
+
|
58
|
+
@javascript
|
59
|
+
Scenario: Move a project when account being moved to is at the account limit
|
60
|
+
Given "joe@example.com" is an admin of the "Another" account
|
61
|
+
And the following limit exists for the "Another" account:
|
62
|
+
| name | value |
|
63
|
+
| projects | 1 |
|
64
|
+
And the following projects exist:
|
65
|
+
| account | name |
|
66
|
+
| name: Test | Project 1 |
|
67
|
+
| name: Another | Project 2 |
|
68
|
+
When I go to the projects page for the "Test" account
|
69
|
+
And I follow "Project 1" within "ul.projects"
|
70
|
+
And I select "Another" from "Account"
|
71
|
+
And I press "Update"
|
72
|
+
Then I should see "at your limit"
|
73
|
+
When I go to the projects page for the "Test" account
|
74
|
+
Then I should see "Project 1"
|
75
|
+
|
76
|
+
Scenario: Archive a project
|
77
|
+
Given the following project exists:
|
78
|
+
| account | name |
|
79
|
+
| name: Test | Project 1 |
|
80
|
+
When I go to the projects page for the "Test" account
|
81
|
+
And I follow "Project 1" within "ul.projects"
|
82
|
+
And I check "Archived"
|
83
|
+
And I press "Update"
|
84
|
+
And I should see "Project 1" within "ul.projects.archived"
|
85
|
+
|
86
|
+
Scenario: Unarchive a project
|
87
|
+
Given the following project exists:
|
88
|
+
| account | name | archived |
|
89
|
+
| name: Test | Project 1 | true |
|
90
|
+
When I go to the projects page for the "Test" account
|
91
|
+
And I follow "Project 1" within "ul.projects.archived"
|
92
|
+
And I uncheck "Archived"
|
93
|
+
And I press "Update"
|
94
|
+
And I should see "Project 1" within "ul.projects.active"
|
95
|
+
|
96
|
+
Scenario: Unarchive a project when at the account limit
|
97
|
+
Given the following limit exists for the "Test" account:
|
98
|
+
| name | value |
|
99
|
+
| projects | 1 |
|
100
|
+
And the following projects exist:
|
101
|
+
| account | name | archived |
|
102
|
+
| name: Test | Project 1 | false |
|
103
|
+
| name: Test | Project 2 | true |
|
104
|
+
When I go to the projects page for the "Test" account
|
105
|
+
And I follow "Project 2"
|
106
|
+
And I uncheck "Archived"
|
107
|
+
And I press "Update"
|
108
|
+
Then I should see "at your limit"
|
109
|
+
When I go to the projects page for the "Test" account
|
110
|
+
And I should see "Project 1" within "ul.projects.active"
|
111
|
+
And I should see "Project 2" within "ul.projects.archived"
|
112
|
+
|
113
|
+
Scenario: View all projects
|
114
|
+
Given the following projects exist:
|
115
|
+
| account | name | archived |
|
116
|
+
| name: Test | Project 1 | false |
|
117
|
+
| name: Test | Project 2 | false |
|
118
|
+
| name: Test | Project 3 | true |
|
119
|
+
| name: Other | Project 3 | false |
|
120
|
+
| name: Another | Project 4 | false |
|
121
|
+
And "joe@example.com" is a member of the "Other" account
|
122
|
+
When I go to the projects page for the "Test" account
|
123
|
+
Then I should see "Project 1" within "ul.projects.active"
|
124
|
+
And I should see "Project 2" within "ul.projects.active"
|
125
|
+
And I should see "Project 3" within "ul.projects.archived"
|
126
|
+
But I should not see "Project 3" within "ul.projects"
|
127
|
+
And I should not see "Project 4" within "ul.projects"
|
128
|
+
|
129
|
+
Scenario: Create new project when at the account limit
|
130
|
+
Given the following limit exists for the "Test" account:
|
131
|
+
| name | value |
|
132
|
+
| projects | 1 |
|
133
|
+
And the following project exists:
|
134
|
+
| account | name |
|
135
|
+
| name: Test | Project 1 |
|
136
|
+
When I go to the projects page for the "Test" account
|
137
|
+
And I follow "New Project"
|
138
|
+
Then I should be on the projects page for the "Test" account
|
139
|
+
And I should see "at your limit"
|
@@ -0,0 +1,142 @@
|
|
1
|
+
Feature: Managing users
|
2
|
+
As a admin user
|
3
|
+
In order to use the site with others
|
4
|
+
I want to be able to invite users, edit them and their permissions
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an account exists with a name of "Test"
|
8
|
+
And I am signed in as an admin of the "Test" account
|
9
|
+
And I am on the memberships page for the "Test" account
|
10
|
+
And the following projects exist:
|
11
|
+
| account | name |
|
12
|
+
| name: Test | See me |
|
13
|
+
| name: Test | Can't find me |
|
14
|
+
|
15
|
+
Scenario: Invite new users
|
16
|
+
When I follow "Invite user"
|
17
|
+
And I fill in "Email" with "invitee@example.com"
|
18
|
+
And I check "See me"
|
19
|
+
And I press "Invite User"
|
20
|
+
Then I should see "invited"
|
21
|
+
When I sign out
|
22
|
+
And I follow the link sent to "invitee@example.com"
|
23
|
+
And I fill in the following new user:
|
24
|
+
| Name | Billy |
|
25
|
+
| Password | secret |
|
26
|
+
And I press "Accept Invitation"
|
27
|
+
Then I should be signed in
|
28
|
+
And "invitee@example.com" should be a member of the "See me" project
|
29
|
+
And "invitee@example.com" should be a member of the "Test" account
|
30
|
+
But "invitee@example.com" should not be a member of the "Can't find me" project
|
31
|
+
When I go to the settings page
|
32
|
+
Then the "Name" field should contain "Billy"
|
33
|
+
|
34
|
+
Scenario: Invite existing user who is not signed in
|
35
|
+
Given the following user exists:
|
36
|
+
| email | password |
|
37
|
+
| invitee@example.com | secret |
|
38
|
+
When I follow "Invite user"
|
39
|
+
And I fill in "Email" with "invitee@example.com"
|
40
|
+
And I press "Invite User"
|
41
|
+
Then I should see "invited"
|
42
|
+
When I sign out
|
43
|
+
And I follow the link sent to "invitee@example.com"
|
44
|
+
And I fill in the following existing user:
|
45
|
+
| Password | secret |
|
46
|
+
And I press "Accept Invitation"
|
47
|
+
Then I should be signed in
|
48
|
+
And "invitee@example.com" should be a member of the "Test" account
|
49
|
+
|
50
|
+
Scenario: Invite existing user who is signed in
|
51
|
+
Given the following user exists:
|
52
|
+
| email | password |
|
53
|
+
| invitee@example.com | secret |
|
54
|
+
When I follow "Invite user"
|
55
|
+
And I fill in "Email" with "invitee@example.com"
|
56
|
+
And I press "Invite User"
|
57
|
+
Then I should see "invited"
|
58
|
+
When I sign out
|
59
|
+
When I sign in as "invitee@example.com/secret"
|
60
|
+
And I follow the link sent to "invitee@example.com"
|
61
|
+
Then I should be signed in
|
62
|
+
And "invitee@example.com" should be a member of the "Test" account
|
63
|
+
|
64
|
+
Scenario: Fail to accept an invitation
|
65
|
+
Given the following invitation exists:
|
66
|
+
| email |
|
67
|
+
| invitee@example.com |
|
68
|
+
When I follow the link sent to "invitee@example.com"
|
69
|
+
And I press "Accept Invitation"
|
70
|
+
Then the form should have inline error messages
|
71
|
+
|
72
|
+
Scenario: Invite admin users
|
73
|
+
Given the following user exists:
|
74
|
+
| email | password |
|
75
|
+
| invitee@example.com | secret |
|
76
|
+
When I follow "Invite user"
|
77
|
+
And I fill in "Email" with "invitee@example.com"
|
78
|
+
And I check "Grant administrator privileges"
|
79
|
+
And I press "Invite User"
|
80
|
+
And I sign out
|
81
|
+
And I follow the link sent to "invitee@example.com"
|
82
|
+
And I fill in the following existing user:
|
83
|
+
| Password | secret |
|
84
|
+
And I press "Accept Invitation"
|
85
|
+
Then I should be signed in
|
86
|
+
And "invitee@example.com" should be an admin member of the "Test" account
|
87
|
+
|
88
|
+
Scenario: invalid invitation
|
89
|
+
When I follow "Invite user"
|
90
|
+
And I press "Invite User"
|
91
|
+
Then the form should have inline error messages
|
92
|
+
|
93
|
+
Scenario: view account members
|
94
|
+
Given the following users exist:
|
95
|
+
| name |
|
96
|
+
| Bill |
|
97
|
+
| John |
|
98
|
+
| Frank |
|
99
|
+
And the following memberships exist:
|
100
|
+
| account | user |
|
101
|
+
| name: Test | name: Bill |
|
102
|
+
| name: Test | name: Frank |
|
103
|
+
When I go to the memberships page for the "Test" account
|
104
|
+
Then I should see "Bill"
|
105
|
+
And I should see "Frank"
|
106
|
+
And I should not see "John"
|
107
|
+
|
108
|
+
Scenario: remove a user from an account
|
109
|
+
Given an user exists with a name of "Frank"
|
110
|
+
And the following memberships exist:
|
111
|
+
| account | user |
|
112
|
+
| name: Test | name: Frank |
|
113
|
+
When I go to the memberships page for the "Test" account
|
114
|
+
And I follow "Frank"
|
115
|
+
Then I should see "Frank belongs to these projects:"
|
116
|
+
And I should see "Frank is an Admin on Test"
|
117
|
+
When I follow "Remove Frank from Test"
|
118
|
+
Then I should see "User removed"
|
119
|
+
And I should be on the memberships page for the "Test" account
|
120
|
+
And I should not see "Frank"
|
121
|
+
|
122
|
+
Scenario: remove yourself from an account
|
123
|
+
Given an user exists with a name of "Frank"
|
124
|
+
And the following memberships exist:
|
125
|
+
| account | user |
|
126
|
+
| name: Test | name: Frank |
|
127
|
+
When I go to the settings page
|
128
|
+
And I fill in "Name" with "My Name"
|
129
|
+
And I press "Update"
|
130
|
+
When I go to the memberships page for the "Test" account
|
131
|
+
And I follow "My Name"
|
132
|
+
When I follow "Remove My Name from Test"
|
133
|
+
Then I should see "User removed"
|
134
|
+
Then I should be on the settings page
|
135
|
+
|
136
|
+
Scenario: Invite new user when at the account limit
|
137
|
+
Given the following limit exists for the "Test" account:
|
138
|
+
| name | value |
|
139
|
+
| users | 1 |
|
140
|
+
When I follow "Invite user"
|
141
|
+
Then I should be on the memberships page for the "Test" account
|
142
|
+
And I should see "at your limit"
|