winton-sum 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Capfile +3 -0
- data/MIT-LICENSE +18 -0
- data/README.markdown +55 -0
- data/Rakefile +45 -0
- data/config/database.example.yml +10 -0
- data/config/deploy.example.rb +36 -0
- data/config/externals.yml +18 -0
- data/config/mail.example.yml +32 -0
- data/config/schedule.rb +20 -0
- data/config.ru +3 -0
- data/db/migrate/001_users.rb +22 -0
- data/db/migrate/002_user_emails.rb +15 -0
- data/features/front_page.feature +14 -0
- data/features/read_email.feature +446 -0
- data/features/receive_email.feature +59 -0
- data/features/step_definitions/email.rb +52 -0
- data/features/step_definitions/given.rb +60 -0
- data/features/step_definitions/then.rb +32 -0
- data/features/step_definitions/when.rb +41 -0
- data/features/support/env.rb +27 -0
- data/features/support/helpers.rb +44 -0
- data/features/support/rspec.rb +11 -0
- data/features/support/webrat.rb +3 -0
- data/features/update_user.feature +76 -0
- data/gemspec.rb +45 -0
- data/lib/sum/boot.rb +29 -0
- data/lib/sum/controller/cron.rb +12 -0
- data/lib/sum/controller/front.rb +6 -0
- data/lib/sum/controller/new.rb +15 -0
- data/lib/sum/helper/application.rb +8 -0
- data/lib/sum/helper/cron.rb +12 -0
- data/lib/sum/helper/new.rb +26 -0
- data/lib/sum/model/incoming_mail.rb +89 -0
- data/lib/sum/model/user.rb +286 -0
- data/lib/sum/model/user_email.rb +31 -0
- data/lib/sum/view/email.haml +70 -0
- data/lib/sum/view/field.haml +10 -0
- data/lib/sum/view/form.haml +12 -0
- data/lib/sum/view/front.haml +25 -0
- data/lib/sum/view/layout.haml +26 -0
- data/lib/sum/view/new.haml +15 -0
- data/lib/sum.rb +30 -0
- data/public/image/1.png +0 -0
- data/public/image/2.png +0 -0
- data/public/image/3.png +0 -0
- data/public/image/bg.png +0 -0
- data/public/image/bot.png +0 -0
- data/public/image/facebox/b.png +0 -0
- data/public/image/facebox/bl.png +0 -0
- data/public/image/facebox/br.png +0 -0
- data/public/image/facebox/closelabel.gif +0 -0
- data/public/image/facebox/loading.gif +0 -0
- data/public/image/facebox/tl.png +0 -0
- data/public/image/facebox/tr.png +0 -0
- data/public/image/favicon.png +0 -0
- data/public/image/field_off.png +0 -0
- data/public/image/field_on.png +0 -0
- data/public/image/ribbon.png +0 -0
- data/public/image/screenshot_receive.png +0 -0
- data/public/image/screenshot_send.png +0 -0
- data/public/image/submit.png +0 -0
- data/public/image/top.png +0 -0
- data/public/javascript/facebox.js +319 -0
- data/public/javascript/jquery-1.3.2.js +19 -0
- data/public/javascript/sum.js +9 -0
- data/public/style/facebox.css +95 -0
- data/public/style/ie.css +35 -0
- data/public/style/print.css +30 -0
- data/public/style/screen.css +256 -0
- data/public/style/sum.css +22 -0
- data/public/style/sum.less +135 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +58 -0
- data/spec/sum/model/incoming_mail_spec.rb +106 -0
- data/spec/sum/model/user_spec.rb +171 -0
- data/sum.gemspec +69 -0
- data/vendor/webrat/History.txt +358 -0
- data/vendor/webrat/MIT-LICENSE.txt +19 -0
- data/vendor/webrat/README.rdoc +85 -0
- data/vendor/webrat/Rakefile +200 -0
- data/vendor/webrat/install.rb +1 -0
- data/vendor/webrat/lib/webrat/core/configuration.rb +102 -0
- data/vendor/webrat/lib/webrat/core/elements/area.rb +31 -0
- data/vendor/webrat/lib/webrat/core/elements/element.rb +33 -0
- data/vendor/webrat/lib/webrat/core/elements/field.rb +409 -0
- data/vendor/webrat/lib/webrat/core/elements/form.rb +103 -0
- data/vendor/webrat/lib/webrat/core/elements/label.rb +31 -0
- data/vendor/webrat/lib/webrat/core/elements/link.rb +93 -0
- data/vendor/webrat/lib/webrat/core/elements/select_option.rb +35 -0
- data/vendor/webrat/lib/webrat/core/locators/area_locator.rb +38 -0
- data/vendor/webrat/lib/webrat/core/locators/button_locator.rb +54 -0
- data/vendor/webrat/lib/webrat/core/locators/field_by_id_locator.rb +37 -0
- data/vendor/webrat/lib/webrat/core/locators/field_labeled_locator.rb +56 -0
- data/vendor/webrat/lib/webrat/core/locators/field_locator.rb +25 -0
- data/vendor/webrat/lib/webrat/core/locators/field_named_locator.rb +41 -0
- data/vendor/webrat/lib/webrat/core/locators/form_locator.rb +19 -0
- data/vendor/webrat/lib/webrat/core/locators/label_locator.rb +34 -0
- data/vendor/webrat/lib/webrat/core/locators/link_locator.rb +74 -0
- data/vendor/webrat/lib/webrat/core/locators/locator.rb +20 -0
- data/vendor/webrat/lib/webrat/core/locators/select_option_locator.rb +59 -0
- data/vendor/webrat/lib/webrat/core/locators.rb +20 -0
- data/vendor/webrat/lib/webrat/core/logging.rb +24 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_content.rb +73 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_selector.rb +74 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_tag.rb +21 -0
- data/vendor/webrat/lib/webrat/core/matchers/have_xpath.rb +147 -0
- data/vendor/webrat/lib/webrat/core/matchers.rb +4 -0
- data/vendor/webrat/lib/webrat/core/methods.rb +63 -0
- data/vendor/webrat/lib/webrat/core/mime.rb +29 -0
- data/vendor/webrat/lib/webrat/core/save_and_open_page.rb +48 -0
- data/vendor/webrat/lib/webrat/core/scope.rb +350 -0
- data/vendor/webrat/lib/webrat/core/session.rb +299 -0
- data/vendor/webrat/lib/webrat/core/xml/hpricot.rb +19 -0
- data/vendor/webrat/lib/webrat/core/xml/nokogiri.rb +76 -0
- data/vendor/webrat/lib/webrat/core/xml/rexml.rb +24 -0
- data/vendor/webrat/lib/webrat/core/xml.rb +115 -0
- data/vendor/webrat/lib/webrat/core.rb +14 -0
- data/vendor/webrat/lib/webrat/core_extensions/blank.rb +58 -0
- data/vendor/webrat/lib/webrat/core_extensions/deprecate.rb +8 -0
- data/vendor/webrat/lib/webrat/core_extensions/detect_mapped.rb +12 -0
- data/vendor/webrat/lib/webrat/core_extensions/meta_class.rb +6 -0
- data/vendor/webrat/lib/webrat/core_extensions/nil_to_param.rb +5 -0
- data/vendor/webrat/lib/webrat/core_extensions/tcp_socket.rb +27 -0
- data/vendor/webrat/lib/webrat/mechanize.rb +74 -0
- data/vendor/webrat/lib/webrat/merb.rb +9 -0
- data/vendor/webrat/lib/webrat/merb_multipart_support.rb +27 -0
- data/vendor/webrat/lib/webrat/merb_session.rb +82 -0
- data/vendor/webrat/lib/webrat/rack.rb +25 -0
- data/vendor/webrat/lib/webrat/rails.rb +106 -0
- data/vendor/webrat/lib/webrat/rspec-rails.rb +10 -0
- data/vendor/webrat/lib/webrat/selenium/application_server_factory.rb +40 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/base.rb +46 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/external.rb +26 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/merb.rb +50 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/rails.rb +44 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers/sinatra.rb +37 -0
- data/vendor/webrat/lib/webrat/selenium/application_servers.rb +5 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/button.js +19 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/label.js +16 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webrat.js +5 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlink.js +12 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratlinkwithin.js +15 -0
- data/vendor/webrat/lib/webrat/selenium/location_strategy_javascript/webratselectwithoption.js +5 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_content.rb +66 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_selector.rb +49 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_tag.rb +72 -0
- data/vendor/webrat/lib/webrat/selenium/matchers/have_xpath.rb +45 -0
- data/vendor/webrat/lib/webrat/selenium/matchers.rb +4 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_extensions.js +6 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_rc_server.rb +84 -0
- data/vendor/webrat/lib/webrat/selenium/selenium_session.rb +248 -0
- data/vendor/webrat/lib/webrat/selenium/silence_stream.rb +18 -0
- data/vendor/webrat/lib/webrat/selenium.rb +81 -0
- data/vendor/webrat/lib/webrat/sinatra.rb +11 -0
- data/vendor/webrat/lib/webrat.rb +31 -0
- data/vendor/webrat/spec/fakes/test_session.rb +34 -0
- data/vendor/webrat/spec/integration/merb/Rakefile +35 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/application.rb +2 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/exceptions.rb +13 -0
- data/vendor/webrat/spec/integration/merb/app/controllers/testing.rb +27 -0
- data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_acceptable.html.erb +63 -0
- data/vendor/webrat/spec/integration/merb/app/views/exceptions/not_found.html.erb +47 -0
- data/vendor/webrat/spec/integration/merb/app/views/layout/application.html.erb +12 -0
- data/vendor/webrat/spec/integration/merb/app/views/testing/show_form.html.erb +27 -0
- data/vendor/webrat/spec/integration/merb/app/views/testing/upload.html.erb +9 -0
- data/vendor/webrat/spec/integration/merb/config/environments/development.rb +15 -0
- data/vendor/webrat/spec/integration/merb/config/environments/rake.rb +11 -0
- data/vendor/webrat/spec/integration/merb/config/environments/test.rb +14 -0
- data/vendor/webrat/spec/integration/merb/config/init.rb +25 -0
- data/vendor/webrat/spec/integration/merb/config/rack.rb +11 -0
- data/vendor/webrat/spec/integration/merb/config/router.rb +34 -0
- data/vendor/webrat/spec/integration/merb/spec/spec.opts +1 -0
- data/vendor/webrat/spec/integration/merb/spec/spec_helper.rb +24 -0
- data/vendor/webrat/spec/integration/merb/spec/webrat_spec.rb +39 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/app_script.rb +31 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/common.rb +64 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/gem_ext.rb +124 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/main.thor +150 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/ops.rb +93 -0
- data/vendor/webrat/spec/integration/merb/tasks/merb.thor/utils.rb +40 -0
- data/vendor/webrat/spec/integration/rack/Rakefile +5 -0
- data/vendor/webrat/spec/integration/rack/app.rb +73 -0
- data/vendor/webrat/spec/integration/rack/test/helper.rb +20 -0
- data/vendor/webrat/spec/integration/rack/test/webrat_rack_test.rb +62 -0
- data/vendor/webrat/spec/integration/rails/Rakefile +30 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/application.rb +15 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/buttons_controller.rb +7 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/fields_controller.rb +4 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/links_controller.rb +7 -0
- data/vendor/webrat/spec/integration/rails/app/controllers/webrat_controller.rb +43 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/buttons_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/fields_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/helpers/links_helper.rb +2 -0
- data/vendor/webrat/spec/integration/rails/app/views/buttons/show.html.erb +11 -0
- data/vendor/webrat/spec/integration/rails/app/views/fields/show.html.erb +9 -0
- data/vendor/webrat/spec/integration/rails/app/views/links/show.html.erb +5 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/before_redirect_form.html.erb +4 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/buttons.html.erb +11 -0
- data/vendor/webrat/spec/integration/rails/app/views/webrat/form.html.erb +28 -0
- data/vendor/webrat/spec/integration/rails/config/boot.rb +109 -0
- data/vendor/webrat/spec/integration/rails/config/environment.rb +12 -0
- data/vendor/webrat/spec/integration/rails/config/environments/development.rb +17 -0
- data/vendor/webrat/spec/integration/rails/config/environments/selenium.rb +22 -0
- data/vendor/webrat/spec/integration/rails/config/environments/test.rb +22 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/inflections.rb +10 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/mime_types.rb +5 -0
- data/vendor/webrat/spec/integration/rails/config/initializers/new_rails_defaults.rb +17 -0
- data/vendor/webrat/spec/integration/rails/config/locales/en.yml +5 -0
- data/vendor/webrat/spec/integration/rails/config/routes.rb +18 -0
- data/vendor/webrat/spec/integration/rails/public/404.html +30 -0
- data/vendor/webrat/spec/integration/rails/public/422.html +30 -0
- data/vendor/webrat/spec/integration/rails/public/500.html +33 -0
- data/vendor/webrat/spec/integration/rails/script/about +4 -0
- data/vendor/webrat/spec/integration/rails/script/console +3 -0
- data/vendor/webrat/spec/integration/rails/script/dbconsole +3 -0
- data/vendor/webrat/spec/integration/rails/script/destroy +3 -0
- data/vendor/webrat/spec/integration/rails/script/generate +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/benchmarker +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/profiler +3 -0
- data/vendor/webrat/spec/integration/rails/script/performance/request +3 -0
- data/vendor/webrat/spec/integration/rails/script/plugin +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/inspector +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/reaper +3 -0
- data/vendor/webrat/spec/integration/rails/script/process/spawner +3 -0
- data/vendor/webrat/spec/integration/rails/script/runner +3 -0
- data/vendor/webrat/spec/integration/rails/script/server +3 -0
- data/vendor/webrat/spec/integration/rails/test/integration/button_click_test.rb +80 -0
- data/vendor/webrat/spec/integration/rails/test/integration/fill_in_test.rb +24 -0
- data/vendor/webrat/spec/integration/rails/test/integration/link_click_test.rb +27 -0
- data/vendor/webrat/spec/integration/rails/test/integration/webrat_test.rb +97 -0
- data/vendor/webrat/spec/integration/rails/test/test_helper.rb +25 -0
- data/vendor/webrat/spec/integration/sinatra/Rakefile +5 -0
- data/vendor/webrat/spec/integration/sinatra/classic_app.rb +64 -0
- data/vendor/webrat/spec/integration/sinatra/modular_app.rb +16 -0
- data/vendor/webrat/spec/integration/sinatra/test/classic_app_test.rb +37 -0
- data/vendor/webrat/spec/integration/sinatra/test/modular_app_test.rb +18 -0
- data/vendor/webrat/spec/integration/sinatra/test/test_helper.rb +16 -0
- data/vendor/webrat/spec/private/core/configuration_spec.rb +116 -0
- data/vendor/webrat/spec/private/core/field_spec.rb +85 -0
- data/vendor/webrat/spec/private/core/link_spec.rb +24 -0
- data/vendor/webrat/spec/private/core/logging_spec.rb +10 -0
- data/vendor/webrat/spec/private/core/session_spec.rb +195 -0
- data/vendor/webrat/spec/private/mechanize/mechanize_session_spec.rb +81 -0
- data/vendor/webrat/spec/private/merb/attaches_file_spec.rb +93 -0
- data/vendor/webrat/spec/private/merb/merb_session_spec.rb +61 -0
- data/vendor/webrat/spec/private/nokogiri_spec.rb +77 -0
- data/vendor/webrat/spec/private/rails/attaches_file_spec.rb +81 -0
- data/vendor/webrat/spec/private/rails/rails_session_spec.rb +112 -0
- data/vendor/webrat/spec/private/selenium/application_servers/rails_spec.rb +26 -0
- data/vendor/webrat/spec/public/basic_auth_spec.rb +24 -0
- data/vendor/webrat/spec/public/check_spec.rb +191 -0
- data/vendor/webrat/spec/public/choose_spec.rb +118 -0
- data/vendor/webrat/spec/public/click_area_spec.rb +106 -0
- data/vendor/webrat/spec/public/click_button_spec.rb +496 -0
- data/vendor/webrat/spec/public/click_link_spec.rb +511 -0
- data/vendor/webrat/spec/public/fill_in_spec.rb +209 -0
- data/vendor/webrat/spec/public/locators/field_by_xpath_spec.rb +19 -0
- data/vendor/webrat/spec/public/locators/field_labeled_spec.rb +172 -0
- data/vendor/webrat/spec/public/locators/field_with_id_spec.rb +16 -0
- data/vendor/webrat/spec/public/matchers/contain_spec.rb +114 -0
- data/vendor/webrat/spec/public/matchers/have_selector_spec.rb +142 -0
- data/vendor/webrat/spec/public/matchers/have_tag_spec.rb +39 -0
- data/vendor/webrat/spec/public/matchers/have_xpath_spec.rb +136 -0
- data/vendor/webrat/spec/public/reload_spec.rb +10 -0
- data/vendor/webrat/spec/public/save_and_open_spec.rb +70 -0
- data/vendor/webrat/spec/public/select_date_spec.rb +112 -0
- data/vendor/webrat/spec/public/select_datetime_spec.rb +137 -0
- data/vendor/webrat/spec/public/select_spec.rb +249 -0
- data/vendor/webrat/spec/public/select_time_spec.rb +100 -0
- data/vendor/webrat/spec/public/selenium/application_server_factory_spec.rb +49 -0
- data/vendor/webrat/spec/public/selenium/application_servers/external_spec.rb +12 -0
- data/vendor/webrat/spec/public/selenium/selenium_session_spec.rb +37 -0
- data/vendor/webrat/spec/public/set_hidden_field_spec.rb +5 -0
- data/vendor/webrat/spec/public/submit_form_spec.rb +5 -0
- data/vendor/webrat/spec/public/visit_spec.rb +58 -0
- data/vendor/webrat/spec/public/within_spec.rb +177 -0
- data/vendor/webrat/spec/rcov.opts +1 -0
- data/vendor/webrat/spec/spec.opts +2 -0
- data/vendor/webrat/spec/spec_helper.rb +50 -0
- metadata +554 -0
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
Feature: Read email
|
|
2
|
+
|
|
3
|
+
As a user
|
|
4
|
+
I want to read a budget email
|
|
5
|
+
In order to know how much I can spend
|
|
6
|
+
|
|
7
|
+
Background:
|
|
8
|
+
Given today is June 1, 2009
|
|
9
|
+
And I have created an account with these attributes:
|
|
10
|
+
| savings | income | bills |
|
|
11
|
+
| 1000 | 5000 | 2500 |
|
|
12
|
+
# income - bills - savings = 1500 (spending money)
|
|
13
|
+
And my email queue is empty
|
|
14
|
+
|
|
15
|
+
Scenario: I see some static information every day
|
|
16
|
+
When the background job runs
|
|
17
|
+
And I open the email
|
|
18
|
+
Then I should see "Today's budget" in the subject
|
|
19
|
+
And I should see "Fiscal month: 06/01/09 to 07/01/09 (30 days)" in the email
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# Day 1
|
|
23
|
+
|
|
24
|
+
Scenario: I see budget information for day 1, having spent nothing today
|
|
25
|
+
When the background job runs
|
|
26
|
+
And I open the email
|
|
27
|
+
Then I should see in the email:
|
|
28
|
+
"""
|
|
29
|
+
You can spend $50.00 today.
|
|
30
|
+
|
|
31
|
+
If you don't spend anything today, you will have
|
|
32
|
+
$51.72 to spend each day.
|
|
33
|
+
$362.07 to spend each week.
|
|
34
|
+
$1500.00 to spend over the next 29 days.
|
|
35
|
+
|
|
36
|
+
You have saved $50.00 more than expected for a 1 day period.
|
|
37
|
+
"""
|
|
38
|
+
# days in month = 30
|
|
39
|
+
# spending money / days in month = 50
|
|
40
|
+
# days left = 29
|
|
41
|
+
# spending money / days left = 51.72
|
|
42
|
+
# spending money / days left * 7 = 362.07
|
|
43
|
+
|
|
44
|
+
Scenario: I see budget information for day 1, having deposited money
|
|
45
|
+
Given it is day 1
|
|
46
|
+
And I have deposited $1.00
|
|
47
|
+
When the background job runs
|
|
48
|
+
And I open the email
|
|
49
|
+
Then I should see in the email:
|
|
50
|
+
"""
|
|
51
|
+
You can spend $51.00 today.
|
|
52
|
+
|
|
53
|
+
If you don't spend anything today, you will have
|
|
54
|
+
$51.76 to spend each day.
|
|
55
|
+
$362.31 to spend each week.
|
|
56
|
+
$1501.00 to spend over the next 29 days.
|
|
57
|
+
|
|
58
|
+
You have saved $51.00 more than expected for a 1 day period.
|
|
59
|
+
"""
|
|
60
|
+
# (spending money / days in month) - spent today = 51
|
|
61
|
+
# spending money + 1 = 1501
|
|
62
|
+
|
|
63
|
+
Scenario: I see budget information for day 1, having spent under budget
|
|
64
|
+
Given it is day 1
|
|
65
|
+
And today I have spent $49.00
|
|
66
|
+
When the background job runs
|
|
67
|
+
And I open the email
|
|
68
|
+
Then I should see in the email:
|
|
69
|
+
"""
|
|
70
|
+
You can spend $1.00 today.
|
|
71
|
+
|
|
72
|
+
If you only spend $49.00 today, you will have
|
|
73
|
+
$50.03 to spend each day.
|
|
74
|
+
$350.24 to spend each week.
|
|
75
|
+
$1451.00 to spend over the next 29 days.
|
|
76
|
+
|
|
77
|
+
You have saved $1.00 more than expected for a 1 day period.
|
|
78
|
+
"""
|
|
79
|
+
|
|
80
|
+
Scenario: I see budget information for day 1, having spent exactly my budget
|
|
81
|
+
Given it is day 1
|
|
82
|
+
And today I have spent $50.00
|
|
83
|
+
When the background job runs
|
|
84
|
+
And I open the email
|
|
85
|
+
Then I should see in the email:
|
|
86
|
+
"""
|
|
87
|
+
You have spent your budget for today.
|
|
88
|
+
|
|
89
|
+
If you only spend $50.00 today, you will have
|
|
90
|
+
$50.00 to spend each day.
|
|
91
|
+
$350.00 to spend each week.
|
|
92
|
+
$1450.00 to spend over the next 29 days.
|
|
93
|
+
|
|
94
|
+
You have spent exactly as expected for a 1 day period.
|
|
95
|
+
"""
|
|
96
|
+
|
|
97
|
+
Scenario: I see budget information for day 1, having spent over budget
|
|
98
|
+
Given it is day 1
|
|
99
|
+
And today I have spent $51.00
|
|
100
|
+
When the background job runs
|
|
101
|
+
And I open the email
|
|
102
|
+
Then I should see in the email:
|
|
103
|
+
"""
|
|
104
|
+
You have spent your budget for today, plus an additional $1.00.
|
|
105
|
+
|
|
106
|
+
If you only spend $51.00 today, you will have
|
|
107
|
+
$49.97 to spend each day.
|
|
108
|
+
$349.76 to spend each week.
|
|
109
|
+
$1449.00 to spend over the next 29 days.
|
|
110
|
+
|
|
111
|
+
You have spent $1.00 more than expected for a 1 day period.
|
|
112
|
+
"""
|
|
113
|
+
|
|
114
|
+
Scenario: I see budget information for day 1, having spent all of my spending money
|
|
115
|
+
Given it is day 1
|
|
116
|
+
And today I have spent $1500.00
|
|
117
|
+
When the background job runs
|
|
118
|
+
And I open the email
|
|
119
|
+
Then I should see in the email:
|
|
120
|
+
"""
|
|
121
|
+
You should not spend any money for the next 29 days if you want to continue to save $1000.00.
|
|
122
|
+
|
|
123
|
+
If you wish to spend into your savings this month, you can afford to spend
|
|
124
|
+
$34.48 each day.
|
|
125
|
+
$241.38 each week.
|
|
126
|
+
$1000.00 over the next 29 days.
|
|
127
|
+
|
|
128
|
+
You have spent $1450.00 more than expected for a 1 day period.
|
|
129
|
+
"""
|
|
130
|
+
# total left = 1000
|
|
131
|
+
# total left / days left = 34.48
|
|
132
|
+
# total left / days left * 7 = 241.38
|
|
133
|
+
|
|
134
|
+
Scenario: I see budget information for day 1, having spent all of my savings
|
|
135
|
+
Given it is day 1
|
|
136
|
+
And today I have spent $2500.00
|
|
137
|
+
When the background job runs
|
|
138
|
+
And I open the email
|
|
139
|
+
Then I should see in the email:
|
|
140
|
+
"""
|
|
141
|
+
You should not spend any money for the next 29 days if you want to avoid going into debt.
|
|
142
|
+
|
|
143
|
+
You have spent $2450.00 more than expected for a 1 day period.
|
|
144
|
+
"""
|
|
145
|
+
|
|
146
|
+
Scenario: I see budget information for day 1, having gone into debt
|
|
147
|
+
Given it is day 1
|
|
148
|
+
And today I have spent $2501.00
|
|
149
|
+
When the background job runs
|
|
150
|
+
And I open the email
|
|
151
|
+
Then I should see in the email:
|
|
152
|
+
"""
|
|
153
|
+
You need to earn $0.03 today.
|
|
154
|
+
|
|
155
|
+
Continue to do so for the next 29 days to avoid going into debt.
|
|
156
|
+
|
|
157
|
+
If you do not, Sum will temporarily decrease your spending money for next month to account for the debt.
|
|
158
|
+
|
|
159
|
+
You have spent $2451.00 more than expected for a 1 day period.
|
|
160
|
+
"""
|
|
161
|
+
# total left = -1
|
|
162
|
+
# total left / days left including today * -1 = 0.03
|
|
163
|
+
|
|
164
|
+
# Day 15
|
|
165
|
+
|
|
166
|
+
Scenario: I see budget information for day 15, having spent nothing today
|
|
167
|
+
Given it is day 15
|
|
168
|
+
And before today I spent $700.00
|
|
169
|
+
And today I have spent $0.00
|
|
170
|
+
When the background job runs
|
|
171
|
+
And I open the email
|
|
172
|
+
Then I should see in the email:
|
|
173
|
+
"""
|
|
174
|
+
You can spend $50.00 today.
|
|
175
|
+
|
|
176
|
+
If you don't spend anything today, you will have
|
|
177
|
+
$53.33 to spend each day.
|
|
178
|
+
$373.33 to spend each week.
|
|
179
|
+
$800.00 to spend over the next 15 days.
|
|
180
|
+
|
|
181
|
+
You have saved $50.00 more than expected for a 15 day period.
|
|
182
|
+
"""
|
|
183
|
+
|
|
184
|
+
Scenario: I see budget information for day 15, having deposited money
|
|
185
|
+
Given it is day 15
|
|
186
|
+
And I have deposited $1.00
|
|
187
|
+
And before today I spent $700.00
|
|
188
|
+
When the background job runs
|
|
189
|
+
And I open the email
|
|
190
|
+
Then I should see in the email:
|
|
191
|
+
"""
|
|
192
|
+
You can spend $51.00 today.
|
|
193
|
+
|
|
194
|
+
If you don't spend anything today, you will have
|
|
195
|
+
$53.40 to spend each day.
|
|
196
|
+
$373.80 to spend each week.
|
|
197
|
+
$801.00 to spend over the next 15 days.
|
|
198
|
+
|
|
199
|
+
You have saved $51.00 more than expected for a 15 day period.
|
|
200
|
+
"""
|
|
201
|
+
|
|
202
|
+
Scenario: I see budget information for day 15, having spent under budget
|
|
203
|
+
Given it is day 15
|
|
204
|
+
And before today I spent $700.00
|
|
205
|
+
And today I have spent $49.00
|
|
206
|
+
When the background job runs
|
|
207
|
+
And I open the email
|
|
208
|
+
Then I should see in the email:
|
|
209
|
+
"""
|
|
210
|
+
You can spend $1.00 today.
|
|
211
|
+
|
|
212
|
+
If you only spend $49.00 today, you will have
|
|
213
|
+
$50.07 to spend each day.
|
|
214
|
+
$350.47 to spend each week.
|
|
215
|
+
$751.00 to spend over the next 15 days.
|
|
216
|
+
|
|
217
|
+
You have saved $1.00 more than expected for a 15 day period.
|
|
218
|
+
"""
|
|
219
|
+
|
|
220
|
+
Scenario: I see budget information for day 15, having spent exactly my budget
|
|
221
|
+
Given it is day 15
|
|
222
|
+
And before today I spent $700.00
|
|
223
|
+
And today I have spent $50.00
|
|
224
|
+
When the background job runs
|
|
225
|
+
And I open the email
|
|
226
|
+
Then I should see in the email:
|
|
227
|
+
"""
|
|
228
|
+
You have spent your budget for today.
|
|
229
|
+
|
|
230
|
+
If you only spend $50.00 today, you will have
|
|
231
|
+
$50.00 to spend each day.
|
|
232
|
+
$350.00 to spend each week.
|
|
233
|
+
$750.00 to spend over the next 15 days.
|
|
234
|
+
|
|
235
|
+
You have spent exactly as expected for a 15 day period.
|
|
236
|
+
"""
|
|
237
|
+
|
|
238
|
+
Scenario: I see budget information for day 15, having spent over budget
|
|
239
|
+
Given it is day 15
|
|
240
|
+
And before today I spent $700.00
|
|
241
|
+
And today I have spent $51.00
|
|
242
|
+
When the background job runs
|
|
243
|
+
And I open the email
|
|
244
|
+
Then I should see in the email:
|
|
245
|
+
"""
|
|
246
|
+
You have spent your budget for today, plus an additional $1.00.
|
|
247
|
+
|
|
248
|
+
If you only spend $51.00 today, you will have
|
|
249
|
+
$49.93 to spend each day.
|
|
250
|
+
$349.53 to spend each week.
|
|
251
|
+
$749.00 to spend over the next 15 days.
|
|
252
|
+
|
|
253
|
+
You have spent $1.00 more than expected for a 15 day period.
|
|
254
|
+
"""
|
|
255
|
+
|
|
256
|
+
Scenario: I see budget information for day 15, having spent all of my spending money
|
|
257
|
+
Given it is day 15
|
|
258
|
+
And before today I spent $700.00
|
|
259
|
+
And today I have spent $800.00
|
|
260
|
+
When the background job runs
|
|
261
|
+
And I open the email
|
|
262
|
+
Then I should see in the email:
|
|
263
|
+
"""
|
|
264
|
+
You should not spend any money for the next 15 days if you want to continue to save $1000.00.
|
|
265
|
+
|
|
266
|
+
If you wish to spend into your savings this month, you can afford to spend
|
|
267
|
+
$66.67 each day.
|
|
268
|
+
$466.67 each week.
|
|
269
|
+
$1000.00 over the next 15 days.
|
|
270
|
+
|
|
271
|
+
You have spent $750.00 more than expected for a 15 day period.
|
|
272
|
+
"""
|
|
273
|
+
|
|
274
|
+
Scenario: I see budget information for day 15, having spent all of my savings
|
|
275
|
+
Given it is day 15
|
|
276
|
+
And before today I spent $700.00
|
|
277
|
+
And today I have spent $1050.00
|
|
278
|
+
When the background job runs
|
|
279
|
+
And I open the email
|
|
280
|
+
Then I should see in the email:
|
|
281
|
+
"""
|
|
282
|
+
You should not spend any money for the next 15 days if you want to continue to save $750.00.
|
|
283
|
+
|
|
284
|
+
If you wish to spend into your savings this month, you can afford to spend
|
|
285
|
+
$50.00 each day.
|
|
286
|
+
$350.00 each week.
|
|
287
|
+
$750.00 over the next 15 days.
|
|
288
|
+
|
|
289
|
+
You have spent $1000.00 more than expected for a 15 day period.
|
|
290
|
+
"""
|
|
291
|
+
|
|
292
|
+
Scenario: I see budget information for day 15, having gone into debt
|
|
293
|
+
Given it is day 15
|
|
294
|
+
And before today I spent $700.00
|
|
295
|
+
And today I have spent $1801.00
|
|
296
|
+
When the background job runs
|
|
297
|
+
And I open the email
|
|
298
|
+
Then I should see in the email:
|
|
299
|
+
"""
|
|
300
|
+
You need to earn $0.06 today.
|
|
301
|
+
|
|
302
|
+
Continue to do so for the next 15 days to avoid going into debt.
|
|
303
|
+
|
|
304
|
+
If you do not, Sum will temporarily decrease your spending money for next month to account for the debt.
|
|
305
|
+
|
|
306
|
+
You have spent $1751.00 more than expected for a 15 day period.
|
|
307
|
+
"""
|
|
308
|
+
|
|
309
|
+
# Day 30
|
|
310
|
+
|
|
311
|
+
Scenario: I see budget information for day 30, having spent nothing today
|
|
312
|
+
Given it is day 30
|
|
313
|
+
And before today I spent $1450.00
|
|
314
|
+
And today I have spent $0.00
|
|
315
|
+
When the background job runs
|
|
316
|
+
And I open the email
|
|
317
|
+
Then I should see in the email:
|
|
318
|
+
"""
|
|
319
|
+
You can spend $50.00 today.
|
|
320
|
+
|
|
321
|
+
You have saved $50.00 more than expected for a 30 day period.
|
|
322
|
+
"""
|
|
323
|
+
|
|
324
|
+
Scenario: I see budget information for day 30, having deposited money
|
|
325
|
+
Given it is day 30
|
|
326
|
+
And I have deposited $1.00
|
|
327
|
+
And before today I spent $1450.00
|
|
328
|
+
When the background job runs
|
|
329
|
+
And I open the email
|
|
330
|
+
Then I should see in the email:
|
|
331
|
+
"""
|
|
332
|
+
You can spend $51.00 today.
|
|
333
|
+
|
|
334
|
+
You have saved $51.00 more than expected for a 30 day period.
|
|
335
|
+
"""
|
|
336
|
+
|
|
337
|
+
Scenario: I see budget information for day 30, having spent under budget
|
|
338
|
+
Given it is day 30
|
|
339
|
+
And before today I spent $1450.00
|
|
340
|
+
And today I have spent $49.00
|
|
341
|
+
When the background job runs
|
|
342
|
+
And I open the email
|
|
343
|
+
Then I should see in the email:
|
|
344
|
+
"""
|
|
345
|
+
You can spend $1.00 today.
|
|
346
|
+
|
|
347
|
+
You have saved $1.00 more than expected for a 30 day period.
|
|
348
|
+
"""
|
|
349
|
+
|
|
350
|
+
Scenario: I see budget information for day 30, having spent exactly my budget
|
|
351
|
+
Given it is day 30
|
|
352
|
+
And before today I spent $1450.00
|
|
353
|
+
And today I have spent $50.00
|
|
354
|
+
When the background job runs
|
|
355
|
+
And I open the email
|
|
356
|
+
Then I should see in the email:
|
|
357
|
+
"""
|
|
358
|
+
You should not spend any money if you want to continue to save $1000.00.
|
|
359
|
+
|
|
360
|
+
You have spent exactly as expected for a 30 day period.
|
|
361
|
+
"""
|
|
362
|
+
|
|
363
|
+
Scenario: I see budget information for day 30, having spent over budget
|
|
364
|
+
Given it is day 30
|
|
365
|
+
And before today I spent $1450.00
|
|
366
|
+
And today I have spent $51.00
|
|
367
|
+
When the background job runs
|
|
368
|
+
And I open the email
|
|
369
|
+
Then I should see in the email:
|
|
370
|
+
"""
|
|
371
|
+
You should not spend any money if you want to continue to save $999.00.
|
|
372
|
+
|
|
373
|
+
You have spent $1.00 more than expected for a 30 day period.
|
|
374
|
+
"""
|
|
375
|
+
|
|
376
|
+
Scenario: I see budget information for day 30, having spent all of my savings
|
|
377
|
+
Given it is day 30
|
|
378
|
+
And before today I spent $1450.00
|
|
379
|
+
And today I have spent $1050.00
|
|
380
|
+
When the background job runs
|
|
381
|
+
And I open the email
|
|
382
|
+
Then I should see in the email:
|
|
383
|
+
"""
|
|
384
|
+
You should not spend any money if you want to avoid going into debt.
|
|
385
|
+
|
|
386
|
+
You have spent $1000.00 more than expected for a 30 day period.
|
|
387
|
+
"""
|
|
388
|
+
|
|
389
|
+
Scenario: I see budget information for day 30, having gone into debt
|
|
390
|
+
Given it is day 30
|
|
391
|
+
And before today I spent $1450.00
|
|
392
|
+
And today I have spent $1051.00
|
|
393
|
+
When the background job runs
|
|
394
|
+
And I open the email
|
|
395
|
+
Then I should see in the email:
|
|
396
|
+
"""
|
|
397
|
+
You need to earn $1.00 today.
|
|
398
|
+
|
|
399
|
+
If you do not, Sum will temporarily decrease your spending money for next month to account for the debt.
|
|
400
|
+
|
|
401
|
+
You have spent $1001.00 more than expected for a 30 day period.
|
|
402
|
+
"""
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
# Transactions
|
|
406
|
+
|
|
407
|
+
Scenario: I see my last transaction
|
|
408
|
+
Given today I have spent $1.00
|
|
409
|
+
When the background job runs
|
|
410
|
+
And I open the email
|
|
411
|
+
Then I should see in the email:
|
|
412
|
+
"""
|
|
413
|
+
Last transaction:
|
|
414
|
+
$-1.00
|
|
415
|
+
"""
|
|
416
|
+
|
|
417
|
+
Scenario: I see my last two transactions
|
|
418
|
+
Given today I have spent $1.00
|
|
419
|
+
And today I have spent $2.00
|
|
420
|
+
When the background job runs
|
|
421
|
+
And I open the email
|
|
422
|
+
Then I should see in the email:
|
|
423
|
+
"""
|
|
424
|
+
Last 2 transactions:
|
|
425
|
+
$-2.00
|
|
426
|
+
$-1.00
|
|
427
|
+
"""
|
|
428
|
+
|
|
429
|
+
Scenario: I see my last five transactions
|
|
430
|
+
Given today I have spent $1.00
|
|
431
|
+
And today I have spent $2.00
|
|
432
|
+
And today I have spent $3.00
|
|
433
|
+
And today I have spent $4.00
|
|
434
|
+
And today I have spent $5.00
|
|
435
|
+
And today I have spent $6.00
|
|
436
|
+
When the background job runs
|
|
437
|
+
And I open the email
|
|
438
|
+
Then I should see in the email:
|
|
439
|
+
"""
|
|
440
|
+
Last 5 transactions:
|
|
441
|
+
$-6.00
|
|
442
|
+
$-5.00
|
|
443
|
+
$-4.00
|
|
444
|
+
$-3.00
|
|
445
|
+
$-2.00
|
|
446
|
+
"""
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
Feature: Receive email
|
|
2
|
+
|
|
3
|
+
As a user
|
|
4
|
+
I want to receive a budget email
|
|
5
|
+
In order to read a budget email
|
|
6
|
+
|
|
7
|
+
Background:
|
|
8
|
+
Given my email queue is empty
|
|
9
|
+
|
|
10
|
+
Scenario: I receive a budget email after creating an account
|
|
11
|
+
Given I have not created an account
|
|
12
|
+
When I visit the front page
|
|
13
|
+
And I submit a valid form
|
|
14
|
+
And the background job runs
|
|
15
|
+
Then I should receive an email
|
|
16
|
+
|
|
17
|
+
Scenario: I receive a budget email after updating an account
|
|
18
|
+
Given I have created an account
|
|
19
|
+
When I visit the front page
|
|
20
|
+
And I submit a valid form
|
|
21
|
+
And the background job runs
|
|
22
|
+
Then I should receive an email
|
|
23
|
+
|
|
24
|
+
Scenario: I receive a budget email at midnight
|
|
25
|
+
Given I have created an account
|
|
26
|
+
And it is midnight
|
|
27
|
+
When the background job runs
|
|
28
|
+
Then I should receive an email
|
|
29
|
+
|
|
30
|
+
Scenario: I receive a budget email at midnight having added a transaction today
|
|
31
|
+
Given I have created an account
|
|
32
|
+
And today I have spent $1.00
|
|
33
|
+
And the background job ran
|
|
34
|
+
And my email queue is empty
|
|
35
|
+
And it is midnight
|
|
36
|
+
When the background job runs
|
|
37
|
+
Then I should receive an email
|
|
38
|
+
And spent today should be zero
|
|
39
|
+
|
|
40
|
+
Scenario: I receive a budget email at the end of the month
|
|
41
|
+
Given today is June 1, 2009
|
|
42
|
+
And I have created an account
|
|
43
|
+
And today I have spent $1.00
|
|
44
|
+
And today is July 1, 2009
|
|
45
|
+
And it is midnight
|
|
46
|
+
When the background job runs
|
|
47
|
+
And I open the email
|
|
48
|
+
Then spent today should be zero
|
|
49
|
+
And I should see in the email:
|
|
50
|
+
"""
|
|
51
|
+
You need to earn $0.03 today.
|
|
52
|
+
"""
|
|
53
|
+
# tests User#temporary_spending_cut
|
|
54
|
+
And I should see in the email:
|
|
55
|
+
"""
|
|
56
|
+
Fiscal month: 07/01/09 to 08/01/09
|
|
57
|
+
"""
|
|
58
|
+
And output the email
|
|
59
|
+
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
Given /^(?:my email queue is empty|no emails have been sent)$/ do
|
|
2
|
+
reset_mailer
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I open the email$/ do
|
|
6
|
+
open_email(current_email_address)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
When %r{^I follow "([^"]*?)" in the email$} do |link|
|
|
10
|
+
visit_in_email(link)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^I should receive (an|\d+) emails?$/ do |amount|
|
|
14
|
+
amount = 1 if amount == "an"
|
|
15
|
+
unread_emails_for(current_email_address).size.should == amount.to_i
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
Then %r{^"([^"]*?)" should receive (\d+) emails?$} do |address, n|
|
|
19
|
+
unread_emails_for(address).size.should == n.to_i
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
Then %r{^"([^"]*?)" should have (\d+) emails?$} do |address, n|
|
|
23
|
+
mailbox_for(address).size.should == n.to_i
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
Then %r{^"([^"]*?)" should not receive an email$} do |address|
|
|
27
|
+
find_email(address).should be_nil
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Then %r{^I should see "([^"]*?)" in the subject$} do |text|
|
|
31
|
+
current_email.should have_subject(Regexp.new(Regexp.escape(text).gsub("\\n", "\n")))
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
Then %r{^I should see in the email:$} do |text|
|
|
35
|
+
current_email.body.should =~ Regexp.new(Regexp.escape(text).gsub("\\n", "\n"))
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
Then %r{^I should see "([^"]*?)" in the email$} do |text|
|
|
39
|
+
current_email.body.should =~ Regexp.new(Regexp.escape(text).gsub("\\n", "\n"))
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
When %r{^"([^"]*?)" opens? the email with subject "([^"]*?)"$} do |address, subject|
|
|
43
|
+
open_email(address, :with_subject => subject)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
When %r{^"([^"]*?)" opens? the email with text "([^"]*?)"$} do |address, text|
|
|
47
|
+
open_email(address, :with_text => text)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
When /^I click the first link in the email$/ do
|
|
51
|
+
click_first_link_in_email
|
|
52
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
Given /^I have created an account$/ do
|
|
2
|
+
$db.migrate_reset
|
|
3
|
+
When "I visit the front page"
|
|
4
|
+
When "I submit a valid form"
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
Given /^I have not created an account$/ do
|
|
8
|
+
User.delete_all
|
|
9
|
+
UserEmail.delete_all
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
Given /^it is midnight$/ do
|
|
13
|
+
now = Time.now.utc
|
|
14
|
+
today_at_12 = DateTime.strptime(
|
|
15
|
+
now.strftime("%m/%d/%Y 12:00 AM %Z"),
|
|
16
|
+
"%m/%d/%Y %I:%M %p %Z"
|
|
17
|
+
).to_time
|
|
18
|
+
Time.stub!(:now).and_return(today_at_12)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
Given /^I have created an account with these attributes:$/ do |table|
|
|
22
|
+
$db.migrate_reset
|
|
23
|
+
When "I visit the front page"
|
|
24
|
+
fill_all_with_valid_data(table.hashes.first)
|
|
25
|
+
click_button
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Given /^today is (.+)$/ do |date|
|
|
29
|
+
now = DateTime.strptime(
|
|
30
|
+
"#{date} #{Time.now.utc.strftime("%H:%M:%S %Z")}",
|
|
31
|
+
"%B %d, %Y %H:%M:%S %Z"
|
|
32
|
+
).to_time
|
|
33
|
+
Time.stub!(:now).and_return(now)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
Given /^it is day (.+)$/ do |day|
|
|
37
|
+
day = day.to_i
|
|
38
|
+
user = find_user
|
|
39
|
+
# Email already sent today
|
|
40
|
+
user.update_attribute(:send_at, user.send_at + day.days)
|
|
41
|
+
Time.stub!(:now).and_return(user.reset_at - 1.month + (day - 1).days)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
Given /^today I have spent \$(.+)$/ do |amount|
|
|
45
|
+
IncomingMail.receive(generate_email(:subject => amount))
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
Given /^before today I spent \$(.+)$/ do |amount|
|
|
49
|
+
user = find_user
|
|
50
|
+
user.spent_this_month += amount.to_f
|
|
51
|
+
user.save
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
Given /^I have deposited \$(.+)$/ do |amount|
|
|
55
|
+
IncomingMail.receive(generate_email(:subject => "+#{amount}"))
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
Given /^the background job ran$/ do
|
|
59
|
+
When "the background job runs"
|
|
60
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
Then /^I should see a form$/ do
|
|
2
|
+
assert_have_selector "form[action='/new'][method='post']"
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
Then /^I should see a.? (.+) text field$/ do |field|
|
|
6
|
+
assert_have_selector "#user_#{field}"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Then /^I should see a submit button$/ do
|
|
10
|
+
assert_have_selector "input[type=image]"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
Then /^I should see a success page$/ do
|
|
14
|
+
within "h1" do
|
|
15
|
+
assert_contain "Success!"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Then /^the (.+) field should have an error$/ do |field|
|
|
20
|
+
assert_have_selector "#user_#{field}"
|
|
21
|
+
assert_have_selector ".validation"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
Then /^the error should be "([^\"]*)"$/ do |error|
|
|
25
|
+
within ".validation" do
|
|
26
|
+
assert_contain error
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Then /^spent today should be zero$/ do
|
|
31
|
+
find_user.spent_today.should == 0
|
|
32
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
When /^I visit the front page$/ do
|
|
2
|
+
visit '/'
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
When /^I submit a valid form$/ do
|
|
6
|
+
fill_all_with_valid_data
|
|
7
|
+
click_button
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
When /^I submit a valid form with (.+)$/ do |input|
|
|
11
|
+
fill_all_with_valid_data
|
|
12
|
+
values = case input
|
|
13
|
+
when "decimals": [ "1000.00", "5000.00", "2000.00" ]
|
|
14
|
+
when "numbers only": [ "1000", "5000", "2000" ]
|
|
15
|
+
when "dollar signs": [ "$1000.00", "$5000.00", "$2000.00" ]
|
|
16
|
+
end
|
|
17
|
+
fill_in "user[savings]", :with => values.pop
|
|
18
|
+
fill_in "user[income]", :with => values.pop
|
|
19
|
+
fill_in "user[bills]", :with => values.pop
|
|
20
|
+
click_button
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
When /^submit an invalid (.+)$/ do |field|
|
|
24
|
+
fill_all_with_valid_data
|
|
25
|
+
fill_in "user[#{field.split.first}]", :with => "invalid"
|
|
26
|
+
click_button
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
When /^submit an empty (.+)$/ do |field|
|
|
30
|
+
fill_all_with_valid_data
|
|
31
|
+
fill_in "user[#{field.split.first}]", :with => ""
|
|
32
|
+
click_button
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
When /^the background job runs$/ do
|
|
36
|
+
visit '/cron'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
When /^output the email$/ do
|
|
40
|
+
puts current_email.body
|
|
41
|
+
end
|