newsletter 3.0.2 → 3.2.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.
- checksums.yaml +5 -13
- data/.gitignore +6 -0
- data/.ruby-version +1 -1
- data/Gemfile +17 -5
- data/README.md +40 -0
- data/app/assets/images/newsletter/BottomRight.gif +0 -0
- data/app/assets/images/newsletter/MidRight.gif +0 -0
- data/app/assets/images/newsletter/TopCenter.gif +0 -0
- data/app/assets/images/newsletter/TopRight.gif +0 -0
- data/app/assets/images/newsletter/calendar_date_select/calendar.gif +0 -0
- data/app/assets/images/newsletter/iReach_logo.gif +0 -0
- data/app/assets/images/newsletter/spacer.gif +0 -0
- data/app/assets/images/newsletter/topMid.gif +0 -0
- data/app/assets/javascripts/newsletter/application.js +6 -0
- data/app/assets/stylesheets/newsletter/admin.css +261 -0
- data/app/assets/stylesheets/newsletter/application.css +3 -1
- data/app/assets/stylesheets/newsletter/nav.css +68 -0
- data/app/assets/stylesheets/newsletter/timepicker.css +54 -0
- data/app/controllers/newsletter/application_controller.rb +5 -26
- data/app/controllers/newsletter/areas_controller.rb +0 -38
- data/app/controllers/newsletter/designs_controller.rb +5 -2
- data/app/controllers/newsletter/elements_controller.rb +7 -7
- data/app/controllers/newsletter/fields_controller.rb +1 -46
- data/app/controllers/newsletter/newsletters_controller.rb +6 -24
- data/app/controllers/newsletter/pieces_controller.rb +8 -21
- data/app/helpers/newsletter/designs_helper.rb +1 -8
- data/app/helpers/newsletter/layout_helper.rb +43 -0
- data/app/helpers/newsletter/newsletters_helper.rb +9 -5
- data/app/models/newsletter/area.rb +1 -4
- data/app/models/newsletter/asset.rb +7 -1
- data/app/models/newsletter/design.rb +48 -34
- data/app/models/newsletter/element.rb +0 -42
- data/app/models/newsletter/field.rb +7 -10
- data/app/models/newsletter/field/inline_asset.rb +15 -2
- data/app/models/newsletter/newsletter.rb +18 -11
- data/app/models/newsletter/piece.rb +20 -24
- data/app/views/layouts/newsletter/application.html.erb +20 -116
- data/app/views/layouts/newsletter/layout.html.erb +15 -0
- data/app/views/newsletter/areas/_area.html.erb +1 -1
- data/app/views/newsletter/designs/_area_fields.html.erb +1 -1
- data/app/views/newsletter/designs/_form.html.erb +11 -29
- data/app/views/newsletter/designs/_newsletter_area.html.erb +2 -2
- data/app/views/newsletter/designs/edit.html.erb +3 -6
- data/app/views/newsletter/designs/index.html.erb +7 -6
- data/app/views/newsletter/designs/new.html.erb +2 -2
- data/app/views/newsletter/designs/show.html.erb +5 -5
- data/app/views/newsletter/elements/_field_fields.html.erb +12 -25
- data/app/views/newsletter/elements/_form.html.erb +38 -34
- data/app/views/newsletter/elements/edit.html.erb +2 -5
- data/app/views/newsletter/elements/index.html.erb +7 -7
- data/app/views/newsletter/elements/new.html.erb +2 -2
- data/app/views/newsletter/elements/show.html.erb +5 -5
- data/app/views/newsletter/fields/_inline_asset.html.erb +12 -32
- data/app/views/newsletter/fields/_text.html.erb +2 -4
- data/app/views/newsletter/fields/_text_area.html.erb +2 -7
- data/app/views/newsletter/newsletters/_form.html.erb +6 -16
- data/app/views/newsletter/newsletters/_head.html.erb +2 -3
- data/app/views/newsletter/newsletters/_newsletter.html.erb +11 -6
- data/app/views/newsletter/newsletters/archive.html.erb +1 -1
- data/app/views/newsletter/newsletters/edit.html.erb +8 -16
- data/app/views/newsletter/newsletters/index.html.erb +7 -7
- data/app/views/newsletter/newsletters/new.html.erb +2 -2
- data/app/views/newsletter/newsletters/show.html.erb +11 -6
- data/app/views/newsletter/pieces/_form.html.erb +1 -8
- data/app/views/newsletter/pieces/edit.html.erb +2 -4
- data/app/views/newsletter/pieces/new.html.erb +3 -5
- data/config/locales/newsletters.en.yml +27 -0
- data/config/routes.rb +4 -4
- data/designs/exports/Example.yml +202 -0
- data/designs/exports/example-export.yaml +481 -87
- data/lib/deleteable.rb +12 -14
- data/lib/newsletter/engine.rb +112 -6
- data/lib/newsletter/version.rb +1 -1
- data/lib/tasks/newsletter.rake +54 -41
- data/newsletter.gemspec +3 -1
- data/spec/test_app/.rspec +2 -0
- data/spec/test_app/app/controllers/application_controller.rb +5 -0
- data/spec/test_app/app/models/ability.rb +8 -0
- data/spec/test_app/app/models/user.rb +10 -0
- data/spec/test_app/app/views/layouts/application.html.erb +3 -1
- data/spec/test_app/config/database.postgres.yml +21 -0
- data/spec/test_app/config/initializers/carrierwave.rb +23 -0
- data/spec/test_app/config/newsletter.yml +6 -3
- data/spec/test_app/config/routes.rb +1 -2
- data/spec/test_app/db/migrate/20131222171230_create_users.rb +13 -0
- data/spec/test_app/db/schema.rb +13 -2
- data/spec/test_app/features/newsletter_management.feature +39 -0
- data/spec/test_app/features/piece_management.feature +20 -0
- data/spec/test_app/features/step_definitions/debugging_steps.rb +3 -0
- data/spec/test_app/features/step_definitions/design_steps.rb +3 -0
- data/spec/test_app/features/step_definitions/login_steps.rb +4 -0
- data/spec/test_app/features/step_definitions/newsletter_steps.rb +24 -0
- data/spec/test_app/features/step_definitions/piece_steps.rb +26 -0
- data/{features → spec/test_app/features}/step_definitions/webrat_steps.rb +10 -6
- data/spec/test_app/features/support/env.rb +36 -0
- data/spec/test_app/features/support/functions.rb +3 -0
- data/{features → spec/test_app/features}/support/paths.rb +10 -1
- data/spec/test_app/lib/debugging.rb +61 -0
- data/spec/test_app/script/full_suite +44 -0
- data/spec/test_app/script/rspec_multi_db +26 -0
- data/spec/test_app/spec/controllers/newsletter/pieces_controller_spec.rb +175 -0
- data/spec/test_app/spec/factories/_functions.rb +19 -0
- data/spec/test_app/spec/factories/assets.rb +8 -0
- data/spec/test_app/spec/factories/designs.rb +1 -1
- data/spec/test_app/spec/factories/newsletters.rb +68 -6
- data/spec/test_app/spec/factories/pieces.rb +8 -0
- data/spec/test_app/spec/factories/users.rb +13 -0
- data/spec/test_app/spec/features/newsletter/design_spec.rb +175 -0
- data/spec/test_app/spec/features/newsletter/element_spec.rb +53 -0
- data/spec/test_app/spec/features/newsletter/newsletter_spec.rb +99 -3
- data/spec/test_app/spec/helpers/newsletter/newsletters_helper_spec.rb +65 -0
- data/spec/test_app/spec/models/newsletter/asset_spec.rb +23 -0
- data/spec/test_app/spec/models/newsletter/design_spec.rb +23 -2
- data/spec/test_app/spec/models/newsletter/element_spec.rb +4 -0
- data/spec/test_app/spec/models/newsletter/inline_asset_spec.rb +43 -0
- data/spec/test_app/spec/models/newsletter/newsletter_spec.rb +102 -2
- data/spec/test_app/spec/models/newsletter/piece_spec.rb +33 -0
- data/spec/test_app/spec/rails_helper.rb +82 -0
- data/spec/test_app/spec/routing/newsletter/pieces_routing_spec.rb +28 -0
- data/spec/test_app/spec/spec_helper.rb +73 -64
- data/spec/test_app/spec/support/carrierwave.rb +7 -0
- data/spec/test_app/spec/support/continuances.rb +18 -0
- data/spec/test_app/spec/support/files/iReach_logo.gif +0 -0
- data/spec/test_app/spec/support/files/test.pdf +0 -0
- data/spec/test_app/spec/support/functions.rb +3 -0
- metadata +145 -726
- data/README +0 -243
- data/README.rdoc +0 -3
- data/app/views/newsletter/elements/_newsletter_field.html.erb +0 -37
- data/features/support/env.rb +0 -17
- data/lib/tasks/newsletter_tasks.rake +0 -4
- data/lib/tasks/rspec.rake +0 -158
- data/spec/spec_helper.rb +0 -55
- data/spec/test_app/db/structure.sql +0 -12
- data/spec/test_app/newsletters/designs/My_Design/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/My_Design/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/My_Design/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/My_Design/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/Testo_Changeo/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/Testo_Changeo/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/empower_innovative_e-business/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/enable_extensible_systems/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/enable_extensible_systems/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/engage_innovative_schemas/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/envisioneer_seamless_ROI/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/harness_integrated_partnerships/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/innovate_24_365_functionalities/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/integrate_mission-critical_systems/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/integrate_mission-critical_systems/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/iterate_real-time_web-readiness/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/iterate_strategic_architectures/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/orchestrate_sticky_communities/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/repurpose_impactful_partnerships/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/revolutionize_robust_partnerships/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/revolutionize_turn-key_bandwidth/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/scale_ubiquitous_synergies/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/syndicate_visionary_metrics/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/target_enterprise_functionalities/layout.html.erb +0 -67
- data/spec/test_app/newsletters/designs/transition_enterprise_systems/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/transition_enterprise_systems/layout.html.erb +0 -66
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_left_column_article.html.erb +0 -10
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_left_column_image.html.erb +0 -2
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_article.html.erb +0 -5
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_headline.html.erb +0 -1
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_image.html.erb +0 -1
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/elements/_right_column_paragraph.html.erb +0 -3
- data/spec/test_app/newsletters/designs/utilize_one-to-one_schemas/layout.html.erb +0 -66
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
# This spec was generated by rspec-rails when you ran the scaffold generator.
|
4
|
+
# It demonstrates how one might use RSpec to specify the controller code that
|
5
|
+
# was generated by Rails when you ran the scaffold generator.
|
6
|
+
#
|
7
|
+
# It assumes that the implementation code is generated by the rails scaffold
|
8
|
+
# generator. If you are using any extension libraries to generate different
|
9
|
+
# controller code, this generated spec may or may not pass.
|
10
|
+
#
|
11
|
+
# It only uses APIs available in rails and/or rspec-rails. There are a number
|
12
|
+
# of tools you can use to make these specs even more expressive, but we're
|
13
|
+
# sticking to rails and rspec-rails APIs to keep things simple and stable.
|
14
|
+
#
|
15
|
+
# Compared to earlier versions of this generator, there is very limited use of
|
16
|
+
# stubs and message expectations in this spec. Stubs are only used when there
|
17
|
+
# is no simpler way to get a handle on the object needed for the example.
|
18
|
+
# Message expectations are only used when there is no simpler way to specify
|
19
|
+
# that an instance is receiving a specific message.
|
20
|
+
|
21
|
+
RSpec.describe Newsletter::PiecesController, :type => :controller do
|
22
|
+
render_views
|
23
|
+
routes {Newsletter::Engine.routes}
|
24
|
+
# This should return the minimal set of attributes required to create a valid
|
25
|
+
# Newsletter::Piece. As you add validations to Newsletter::Piece, be sure to
|
26
|
+
# adjust the attributes here as well.
|
27
|
+
before(:each) do
|
28
|
+
@design = import_design
|
29
|
+
@newsletter = FactoryGirl.create(:newsletter, design: @design)
|
30
|
+
@area = @newsletter.area('right_column')
|
31
|
+
@element = @area.elements.detect{|e| e.name.eql?('Right Column Headline')}
|
32
|
+
@field = @element.fields.first
|
33
|
+
end
|
34
|
+
let(:valid_attributes) {{
|
35
|
+
newsletter_id: @newsletter.id,
|
36
|
+
area_id: @area.id,
|
37
|
+
element_id: @element.id,
|
38
|
+
field_values_attributes: {
|
39
|
+
@field.id => {
|
40
|
+
text: "Extra! Extra!"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
}}
|
44
|
+
|
45
|
+
let(:invalid_attributes) {{
|
46
|
+
newsletter_id: @newsletter.id,
|
47
|
+
element_id: @element.id,
|
48
|
+
field_values_attributes: {
|
49
|
+
@field.id => {
|
50
|
+
text: "Extra! Extra!"
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}}
|
54
|
+
|
55
|
+
# This should return the minimal set of values that should be in the session
|
56
|
+
# in order to pass any filters (e.g. authentication) defined in
|
57
|
+
# Newsletter::PiecesController. Be sure to keep this updated too.
|
58
|
+
let(:valid_session) { {} }
|
59
|
+
|
60
|
+
describe "GET #new" do
|
61
|
+
it "assigns a new piece as @piece" do
|
62
|
+
get :new, {newsletter_id: @newsletter.id, element_id: @element.id, area_id: @area.id},
|
63
|
+
valid_session
|
64
|
+
expect(assigns(:piece)).to be_a_new(Newsletter::Piece)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "GET #edit" do
|
69
|
+
it "assigns the requested piece as @piece" do
|
70
|
+
piece = Newsletter::Piece.create! valid_attributes
|
71
|
+
get :edit, {:id => piece.to_param}, valid_session
|
72
|
+
expect(assigns(:piece)).to eq(piece)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "POST #create" do
|
77
|
+
context "with valid params" do
|
78
|
+
it "creates a new Newsletter::Piece" do
|
79
|
+
expect {
|
80
|
+
post :create, {:piece => valid_attributes}, valid_session
|
81
|
+
}.to change(Newsletter::Piece, :count).by(1)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "assigns a newly created piece as @piece" do
|
85
|
+
post :create, {:piece => valid_attributes}, valid_session
|
86
|
+
expect(assigns(:piece)).to be_a(Newsletter::Piece)
|
87
|
+
expect(assigns(:piece)).to be_persisted
|
88
|
+
end
|
89
|
+
|
90
|
+
it "redirects to the created piece" do
|
91
|
+
post :create, {:piece => valid_attributes}, valid_session
|
92
|
+
expect(response).to redirect_to(edit_newsletter_path(@newsletter))
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
context "with invalid params" do
|
97
|
+
it "assigns a newly created but unsaved piece as @piece" do
|
98
|
+
pending "Currently having issues forcing a piece to be valid and save, also except for associations... there are no validations currently"
|
99
|
+
post :create, {:piece => invalid_attributes}, valid_session
|
100
|
+
expect(assigns(:piece)).to be_a_new(Newsletter::Piece)
|
101
|
+
end
|
102
|
+
|
103
|
+
it "re-renders the 'new' template" do
|
104
|
+
pending "Currently having issues forcing a piece to be valid and save, also except for associations... there are no validations currently"
|
105
|
+
post :create, {:piece => invalid_attributes}, valid_session
|
106
|
+
expect(response).to render_template("new")
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "PUT #update" do
|
112
|
+
context "with valid params" do
|
113
|
+
let(:new_attributes) {{
|
114
|
+
newsletter_id: @newsletter.id,
|
115
|
+
area_id: @area.id,
|
116
|
+
element_id: @element.id,
|
117
|
+
field_values_attributes: {
|
118
|
+
@field.id => {
|
119
|
+
text: "Extra! Extra!"
|
120
|
+
}
|
121
|
+
}
|
122
|
+
}}
|
123
|
+
|
124
|
+
it "updates the requested piece" do
|
125
|
+
piece = Newsletter::Piece.create! valid_attributes
|
126
|
+
put :update, {:id => piece.to_param, :piece => new_attributes}, valid_session
|
127
|
+
piece.reload
|
128
|
+
skip("Add assertions for updated state")
|
129
|
+
end
|
130
|
+
|
131
|
+
it "assigns the requested piece as @piece" do
|
132
|
+
piece = Newsletter::Piece.create! valid_attributes
|
133
|
+
put :update, {:id => piece.to_param, :piece => valid_attributes}, valid_session
|
134
|
+
expect(assigns(:piece)).to eq(piece)
|
135
|
+
end
|
136
|
+
|
137
|
+
it "redirects to the newsletter edit" do
|
138
|
+
piece = Newsletter::Piece.create! valid_attributes
|
139
|
+
put :update, {:id => piece.to_param, :piece => valid_attributes}, valid_session
|
140
|
+
expect(response).to redirect_to(edit_newsletter_path(@newsletter))
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context "with invalid params" do
|
145
|
+
it "assigns the piece as @piece" do
|
146
|
+
piece = Newsletter::Piece.create! valid_attributes
|
147
|
+
put :update, {:id => piece.to_param, :piece => invalid_attributes}, valid_session
|
148
|
+
expect(assigns(:piece)).to eq(piece)
|
149
|
+
end
|
150
|
+
|
151
|
+
it "re-renders the 'edit' template" do
|
152
|
+
pending "Currently having issues forcing a piece to be valid and save, also except for associations... there are no validations currently"
|
153
|
+
piece = Newsletter::Piece.create! valid_attributes
|
154
|
+
put :update, {:id => piece.to_param, :piece => invalid_attributes}, valid_session
|
155
|
+
expect(response).to render_template("edit")
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "DELETE #destroy" do
|
161
|
+
it "destroys the requested piece" do
|
162
|
+
piece = Newsletter::Piece.create! valid_attributes
|
163
|
+
expect {
|
164
|
+
delete :destroy, {:id => piece.to_param}, valid_session
|
165
|
+
}.to change(Newsletter::Piece, :count).by(-1)
|
166
|
+
end
|
167
|
+
|
168
|
+
it "redirects to the newsletter edit" do
|
169
|
+
piece = Newsletter::Piece.create! valid_attributes
|
170
|
+
delete :destroy, {:id => piece.to_param}, valid_session
|
171
|
+
expect(response).to redirect_to(edit_newsletter_path(@newsletter))
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
def random_bool
|
2
|
+
Kernel.rand(2) == 1
|
3
|
+
end
|
4
|
+
|
5
|
+
def random_int(min,max)
|
6
|
+
count = max - min + 1
|
7
|
+
Kernel.rand(count) + min
|
8
|
+
end
|
9
|
+
|
10
|
+
def random_decimal(min,max,precision=2)
|
11
|
+
multiplier = 10 ** precision
|
12
|
+
count = max - min + 1
|
13
|
+
puts "multiplier: #{multiplier}"
|
14
|
+
(Kernel.rand(count * multiplier) + min * multiplier).to_f / multiplier
|
15
|
+
end
|
16
|
+
|
17
|
+
def random_value(values)
|
18
|
+
values[random_int(0,(values.length-1))]
|
19
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Read about factories at https://github.com/thoughtbot/factory_girl
|
2
2
|
def import_design(file=nil, name=nil)
|
3
3
|
name ||= Faker::Company.bs.split(/\s+/).each(&:capitalize).join(' ')
|
4
|
-
file ||= File.join(
|
4
|
+
file ||= File.join(Newsletter::PLUGIN_ROOT,'designs','exports','example-export.yaml')
|
5
5
|
Newsletter::Design.import(file,name)
|
6
6
|
end
|
7
7
|
|
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
FactoryGirl.define do
|
4
4
|
factory :newsletter, class: Newsletter::Newsletter do
|
5
|
-
name {Faker::
|
6
|
-
description {Faker::Lorem.paragraphs}
|
5
|
+
name {Faker::Company.name}
|
6
|
+
description {Faker::Lorem.paragraphs(1)[0..125]}
|
7
7
|
association :design
|
8
8
|
pieces do |newsletter|
|
9
9
|
left_area = newsletter.design.areas.where(name: 'left_column').first
|
@@ -16,13 +16,75 @@ FactoryGirl.define do
|
|
16
16
|
#right_area = newsletter.design.areas.where(name: 'right_column').first
|
17
17
|
|
18
18
|
[ ::Newsletter::Piece.new(
|
19
|
-
|
20
|
-
|
19
|
+
area_id: left_area.id,
|
20
|
+
element_id: left_image_element.id,
|
21
21
|
field_values_attributes: { image_field.id => {
|
22
|
-
url:
|
22
|
+
url: Faker::Internet.url.gsub(%r#(/[^/]*\.[^/]*)?$#,'/bobo.jpg')
|
23
23
|
}}
|
24
24
|
)]
|
25
25
|
end
|
26
|
-
|
26
|
+
factory :newsletter_with_image_asset do
|
27
|
+
pieces do | newsletter |
|
28
|
+
left_area = newsletter.design.areas.where(name: 'left_column').first
|
29
|
+
left_image_element = left_area.elements.where(name: 'Left Column Image').first
|
30
|
+
image_field = left_image_element.fields.first
|
31
|
+
#article = area.elements.where(name: 'Left Column Article').first
|
32
|
+
#link = article.fields.where(name: 'link').first
|
33
|
+
#headline = article.fields.where(name: 'headline').first
|
34
|
+
#excerpt = article.fields.where(name: 'article_excerpt').first
|
35
|
+
#right_area = newsletter.design.areas.where(name: 'right_column').first
|
36
|
+
|
37
|
+
[ ::Newsletter::Piece.new(
|
38
|
+
area_id: left_area.id,
|
39
|
+
element_id: left_image_element.id,
|
40
|
+
field_values_attributes: { image_field.id => {
|
41
|
+
uploaded_data: Rack::Test::UploadedFile.new(File.open(File.join(Rails.root,
|
42
|
+
'/spec/support/files/iReach_logo.gif')))
|
43
|
+
}}
|
44
|
+
)]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
factory :newsletter_with_pdf_asset do
|
48
|
+
pieces do | newsletter |
|
49
|
+
left_area = newsletter.design.areas.where(name: 'left_column').first
|
50
|
+
left_image_element = left_area.elements.where(name: 'Left Column Image').first
|
51
|
+
image_field = left_image_element.fields.first
|
52
|
+
#article = area.elements.where(name: 'Left Column Article').first
|
53
|
+
#link = article.fields.where(name: 'link').first
|
54
|
+
#headline = article.fields.where(name: 'headline').first
|
55
|
+
#excerpt = article.fields.where(name: 'article_excerpt').first
|
56
|
+
#right_area = newsletter.design.areas.where(name: 'right_column').first
|
57
|
+
|
58
|
+
[ ::Newsletter::Piece.new(
|
59
|
+
area_id: left_area.id,
|
60
|
+
element_id: left_image_element.id,
|
61
|
+
field_values_attributes: { image_field.id => {
|
62
|
+
uploaded_data: Rack::Test::UploadedFile.new(File.open(File.join(Rails.root,
|
63
|
+
'/spec/support/files/test.pdf')))
|
64
|
+
}}
|
65
|
+
)]
|
66
|
+
end
|
67
|
+
end
|
68
|
+
factory :newsletter_with_pdf_url do
|
69
|
+
pieces do | newsletter |
|
70
|
+
left_area = newsletter.design.areas.where(name: 'left_column').first
|
71
|
+
left_image_element = left_area.elements.where(name: 'Left Column Image').first
|
72
|
+
image_field = left_image_element.fields.first
|
73
|
+
#article = area.elements.where(name: 'Left Column Article').first
|
74
|
+
#link = article.fields.where(name: 'link').first
|
75
|
+
#headline = article.fields.where(name: 'headline').first
|
76
|
+
#excerpt = article.fields.where(name: 'article_excerpt').first
|
77
|
+
#right_area = newsletter.design.areas.where(name: 'right_column').first
|
78
|
+
|
79
|
+
[ ::Newsletter::Piece.new(
|
80
|
+
area_id: left_area.id,
|
81
|
+
element_id: left_image_element.id,
|
82
|
+
field_values_attributes: { image_field.id => {
|
83
|
+
url: Faker::Internet.url.gsub(%r#(/[^/]*\.[^/]*)?$#,'/bobo.pdf')
|
84
|
+
}}
|
85
|
+
)]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
27
89
|
end
|
28
90
|
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Read about factories at https://github.com/thoughtbot/factory_girl
|
2
|
+
begin
|
3
|
+
FactoryGirl.define do
|
4
|
+
factory :user do
|
5
|
+
first_name {Faker::Name.first_name}
|
6
|
+
last_name {Faker::Name.last_name}
|
7
|
+
email {Faker::Internet.email}
|
8
|
+
phone {Faker::PhoneNumber.phone_number}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
rescue FactoryGirl::DuplicateDefinitionError => e
|
12
|
+
# this is OK ... since it could blow up because of ireach
|
13
|
+
end
|
@@ -0,0 +1,175 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.feature Newsletter::Design do
|
4
|
+
let(:left_area_only_layout) {
|
5
|
+
<<EOT
|
6
|
+
<%= render left_area %>
|
7
|
+
EOT
|
8
|
+
}
|
9
|
+
let(:full_layout) {
|
10
|
+
<<EOT
|
11
|
+
<%= render left_area %>
|
12
|
+
<%= render right_area %>
|
13
|
+
EOT
|
14
|
+
}
|
15
|
+
context "a new design" do
|
16
|
+
it "can be created", js: true do
|
17
|
+
visit "/newsletter/designs"
|
18
|
+
click_link "New Design"
|
19
|
+
fill_in "Name", with: "My Design"
|
20
|
+
fill_in "Description", with: "This is an awesome design!"
|
21
|
+
fill_in "HTML code", with: left_area_only_layout
|
22
|
+
click_link "Add Area"
|
23
|
+
find(:css, ".area input").set 'left_area'
|
24
|
+
click_button "Submit"
|
25
|
+
@design = Newsletter::Design.where(name: 'My Design').first
|
26
|
+
expect(Newsletter::Design.count).to eq 1
|
27
|
+
expect(@design.description).to eq "This is an awesome design!"
|
28
|
+
expect(remove_whitespace(@design.html_text)).to eq remove_whitespace(
|
29
|
+
left_area_only_layout)
|
30
|
+
expect(@design.areas.count).to eq 1
|
31
|
+
@left_area = @design.areas.first
|
32
|
+
expect(@left_area.name).to eq "left_area"
|
33
|
+
and_it "can be edited" do
|
34
|
+
click_link "Add Area"
|
35
|
+
find(:css, "#new_area input").set 'right_area'
|
36
|
+
fill_in "HTML code", with: full_layout
|
37
|
+
click_button "Submit"
|
38
|
+
@design = Newsletter::Design.first
|
39
|
+
expect(Newsletter::Design.count).to eq 1
|
40
|
+
expect(@design.areas.count).to eq 2
|
41
|
+
@right_area = @design.areas.detect{|a| a.name.eql?('right_area')}
|
42
|
+
@left_area = @design.areas.detect{|a| a.name.eql?('left_area')}
|
43
|
+
expect(remove_whitespace(@design.html_text)).to eq remove_whitespace(full_layout)
|
44
|
+
end
|
45
|
+
and_it "when managing elements" do
|
46
|
+
and_it "can create an element with a text area in the left area" do
|
47
|
+
click_link "Manage Elements"
|
48
|
+
click_link "New Newsletter Element"
|
49
|
+
fill_in "Name", with: "Left Area Text"
|
50
|
+
fill_in "Description", with: "Left Area Text description instructions"
|
51
|
+
fill_in "HTML code", with: "<%= filter(my_paragraph) %>"
|
52
|
+
click_link "Add Field"
|
53
|
+
within(:css, "#new_field") do
|
54
|
+
fill_in "Name", with: "my_paragraph"
|
55
|
+
fill_in "Label", with: "My Paragraph"
|
56
|
+
fill_in "Description", with: "My Paragraph is a text area for you!"
|
57
|
+
select "Textarea", from: "Type"
|
58
|
+
end
|
59
|
+
check "left_area"
|
60
|
+
click_button "Submit"
|
61
|
+
expect(Newsletter::Element.count).to eq 1
|
62
|
+
@left_area.reload
|
63
|
+
expect(@left_area.elements.count).to eq 1
|
64
|
+
@left_area_text = @left_area.elements.first
|
65
|
+
@left_area_text_field = @left_area_text.fields.first
|
66
|
+
expect(@left_area_text.fields.length).to eq 1
|
67
|
+
expect(@left_area_text.name).to eq "Left Area Text"
|
68
|
+
expect(@left_area_text.description).to eq \
|
69
|
+
"Left Area Text description instructions"
|
70
|
+
expect(@left_area_text.html_text).to eq "<%= filter(my_paragraph) %>"
|
71
|
+
expect(@left_area_text_field.class).to eq Newsletter::Field::TextArea
|
72
|
+
expect(@left_area_text_field.name).to eq "my_paragraph"
|
73
|
+
expect(@left_area_text_field.description).to eq \
|
74
|
+
"My Paragraph is a text area for you!"
|
75
|
+
expect(@left_area_text_field.label).to eq "My Paragraph"
|
76
|
+
click_link "Edit"
|
77
|
+
expect(page).to have_content "Edit Element '#{@left_area_text.name}'"
|
78
|
+
click_link "View All"
|
79
|
+
click_link "Back to Design"
|
80
|
+
end
|
81
|
+
and_it "can create an element with a text field in the right area" do
|
82
|
+
click_link "Manage Elements"
|
83
|
+
click_link "New Newsletter Element"
|
84
|
+
fill_in "Name", with: "Right Area Text"
|
85
|
+
fill_in "Description", with: "Right Area Text description instructions"
|
86
|
+
fill_in "HTML code", with: "<%= filter(my_paragraph) %>"
|
87
|
+
click_link "Add Field"
|
88
|
+
within(:css, "#new_field") do
|
89
|
+
fill_in "Name", with: "my_text"
|
90
|
+
fill_in "Label", with: "My Text"
|
91
|
+
fill_in "Description", with: "My Text is a text area for you!"
|
92
|
+
select "Text", from: "Type"
|
93
|
+
end
|
94
|
+
check "right_area"
|
95
|
+
click_button "Submit"
|
96
|
+
expect(Newsletter::Element.count).to eq 2
|
97
|
+
@right_area.reload
|
98
|
+
expect(@right_area.elements.count).to eq 1
|
99
|
+
@right_area_text = @right_area.elements.first
|
100
|
+
@right_area_text_field = @right_area_text.fields.first
|
101
|
+
expect(@right_area_text.fields.length).to eq 1
|
102
|
+
expect(@right_area_text.name).to eq "Right Area Text"
|
103
|
+
expect(@right_area_text.description).to eq \
|
104
|
+
"Right Area Text description instructions"
|
105
|
+
expect(@right_area_text.html_text).to eq "<%= filter(my_paragraph) %>"
|
106
|
+
expect(@right_area_text_field.class).to eq Newsletter::Field::Text
|
107
|
+
expect(@right_area_text_field.name).to eq "my_text"
|
108
|
+
expect(@right_area_text_field.description).to eq \
|
109
|
+
"My Text is a text area for you!"
|
110
|
+
expect(@right_area_text_field.label).to eq "My Text"
|
111
|
+
click_link "Back to Design"
|
112
|
+
end
|
113
|
+
and_it "can create an element with an inline asset" do
|
114
|
+
click_link "Manage Elements"
|
115
|
+
click_link "New Newsletter Element"
|
116
|
+
fill_in "Name", with: "Nice Image"
|
117
|
+
fill_in "Description", with: "Image description instructions"
|
118
|
+
fill_in "HTML code", with: "<%= image_tag nice_image.image.url %>"
|
119
|
+
click_link "Add Field"
|
120
|
+
within(:css, "#new_field") do
|
121
|
+
fill_in "Name", with: "nice_image"
|
122
|
+
fill_in "Label", with: "Nice Image"
|
123
|
+
fill_in "Description", with: "Nice Image is an image for you!"
|
124
|
+
select "Inlineasset", from: "Type"
|
125
|
+
end
|
126
|
+
check "right_area"
|
127
|
+
check "left_area"
|
128
|
+
click_button "Submit"
|
129
|
+
expect(Newsletter::Element.count).to eq 3
|
130
|
+
@right_area.reload
|
131
|
+
@left_area.reload
|
132
|
+
expect(@right_area.elements.count).to eq 2
|
133
|
+
expect(@right_area.elements.count).to eq 2
|
134
|
+
@nice_image = @left_area.elements.detect{|e| e.name.eql?('Nice Image')}
|
135
|
+
expect(@nice_image.fields.length).to eq 1
|
136
|
+
@nice_image_field = @nice_image.fields.first
|
137
|
+
expect(@nice_image.name).to eq "Nice Image"
|
138
|
+
expect(@nice_image.description).to eq \
|
139
|
+
"Image description instructions"
|
140
|
+
expect(@nice_image.html_text).to eq "<%= image_tag nice_image.image.url %>"
|
141
|
+
expect(@nice_image_field.class).to eq Newsletter::Field::InlineAsset
|
142
|
+
expect(@nice_image_field.name).to eq "nice_image"
|
143
|
+
expect(@nice_image_field.description).to eq \
|
144
|
+
"Nice Image is an image for you!"
|
145
|
+
expect(@nice_image_field.label).to eq "Nice Image"
|
146
|
+
click_link "Back to Design"
|
147
|
+
end
|
148
|
+
and_it "soft deletes designs" do
|
149
|
+
click_link "View All"
|
150
|
+
click_link "Delete"
|
151
|
+
expect(Newsletter::Design.count).to eq 0
|
152
|
+
expect(Newsletter::Design.deleted.count).to eq 1
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
it "can sort an element's fields" do
|
158
|
+
pending "Not tested"
|
159
|
+
design = import_design
|
160
|
+
element = design.elements.detect{|e| e.name.eql?('Left Column Article')}
|
161
|
+
visit "/newsletter/designs/#{design.id}/edit"
|
162
|
+
click_link "Manage Elements"
|
163
|
+
within(:css, "#element_1") do
|
164
|
+
click_link "Edit"
|
165
|
+
end
|
166
|
+
raise "Not Tested"
|
167
|
+
end
|
168
|
+
it "paginates when there are a lot of them" do
|
169
|
+
50.times{import_design(nil,Faker::Company.bs)}
|
170
|
+
visit "/newsletter/designs"
|
171
|
+
expect(page.body).to match /Next/
|
172
|
+
expect(page.body).to match /Previous/
|
173
|
+
click_link "Next"
|
174
|
+
end
|
175
|
+
end
|