workarea-blog 3.4.7
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 +7 -0
- data/.editorconfig +20 -0
- data/.eslintignore +2 -0
- data/.eslintrc +24 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +37 -0
- data/.github/ISSUE_TEMPLATE/documentation-request.md +17 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- data/.gitignore +16 -0
- data/.rspec +2 -0
- data/.scss-lint.yml +188 -0
- data/.tailor +180 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +1123 -0
- data/CODE_OF_CONDUCT.md +3 -0
- data/CONTRIBUTING.md +3 -0
- data/Gemfile +7 -0
- data/LICENSE +52 -0
- data/README.md +140 -0
- data/Rakefile +42 -0
- data/app/assets/images/workarea/admin/blog/content_block_types/blog_entry.svg +1 -0
- data/app/assets/images/workarea/admin/blog/icons/blog.svg +1 -0
- data/app/assets/images/workarea/admin/blog/icons/blog_entry.svg +1 -0
- data/app/assets/images/workarea/admin/blog/icons/blog_post_comment.svg +1 -0
- data/app/assets/javascripts/workarea/storefront/blog/modules/blog_comment_placeholder.js +33 -0
- data/app/assets/stylesheets/workarea/admin/blog/components/_blog_entry_card.scss +14 -0
- data/app/assets/stylesheets/workarea/storefront/blog/components/_blog_entry.scss +91 -0
- data/app/assets/stylesheets/workarea/storefront/blog/components/_blog_entry_summary.scss +74 -0
- data/app/assets/stylesheets/workarea/storefront/blog/components/_featured_entry_content_block.scss +22 -0
- data/app/controllers/workarea/admin/application_controller.decorator +5 -0
- data/app/controllers/workarea/admin/content_blog_comments_controller.rb +54 -0
- data/app/controllers/workarea/admin/content_blog_entries_controller.rb +70 -0
- data/app/controllers/workarea/admin/content_blogs_controller.rb +56 -0
- data/app/controllers/workarea/admin/create_content_blog_entries_controller.rb +69 -0
- data/app/controllers/workarea/storefront/blog_comments_controller.rb +14 -0
- data/app/controllers/workarea/storefront/blog_entries_controller.rb +48 -0
- data/app/controllers/workarea/storefront/blogs_controller.rb +19 -0
- data/app/helpers/workarea/admin/blogs_helper.rb +61 -0
- data/app/models/workarea/content/blog.rb +26 -0
- data/app/models/workarea/content/blog_comment.rb +67 -0
- data/app/models/workarea/content/blog_entry.rb +35 -0
- data/app/models/workarea/content/fields/blog_entry_id.rb +11 -0
- data/app/models/workarea/content/fields/blog_id.rb +8 -0
- data/app/models/workarea/search/admin/content_blog.rb +27 -0
- data/app/models/workarea/search/admin/content_blog_entry.rb +37 -0
- data/app/queries/workarea/metadata/content_blog.rb +6 -0
- data/app/queries/workarea/metadata/content_blog_entry.rb +6 -0
- data/app/queries/workarea/search/admin_blog_entries.rb +24 -0
- data/app/queries/workarea/search/admin_blogs.rb +20 -0
- data/app/seeds/workarea/blog_comments_seeds.rb +26 -0
- data/app/seeds/workarea/blog_entry_seeds.rb +73 -0
- data/app/seeds/workarea/blog_seeds.rb +53 -0
- data/app/services/workarea/search/queries/blog_admin.rb +20 -0
- data/app/services/workarea/search/queries/blog_entry_admin.rb +13 -0
- data/app/services/workarea/set_navigable.decorator +10 -0
- data/app/view_models/workarea/admin/blog_comments_view_model.rb +45 -0
- data/app/view_models/workarea/admin/blog_entries_view_model.rb +31 -0
- data/app/view_models/workarea/admin/blog_entry_view_model.rb +29 -0
- data/app/view_models/workarea/admin/blog_search_view_model.rb +6 -0
- data/app/view_models/workarea/admin/blog_view_model.rb +13 -0
- data/app/view_models/workarea/storefront/blog_entry_view_model.rb +43 -0
- data/app/view_models/workarea/storefront/blog_index_view_model.rb +17 -0
- data/app/view_models/workarea/storefront/blog_view_model.rb +83 -0
- data/app/view_models/workarea/storefront/content_blocks/blog_entry_content_block_view_model.rb +63 -0
- data/app/views/workarea/admin/activities/_content_blog_comment_create.html.haml +12 -0
- data/app/views/workarea/admin/activities/_content_blog_comment_destroy.html.haml +9 -0
- data/app/views/workarea/admin/activities/_content_blog_comment_update.html.haml +10 -0
- data/app/views/workarea/admin/activities/_content_blog_create.html.haml +12 -0
- data/app/views/workarea/admin/activities/_content_blog_destroy.html.haml +10 -0
- data/app/views/workarea/admin/activities/_content_blog_entry_create.html.haml +12 -0
- data/app/views/workarea/admin/activities/_content_blog_entry_destroy.html.haml +10 -0
- data/app/views/workarea/admin/activities/_content_blog_entry_update.html.haml +10 -0
- data/app/views/workarea/admin/activities/_content_blog_update.html.haml +10 -0
- data/app/views/workarea/admin/blog/_dashboard_navigation.html.haml +1 -0
- data/app/views/workarea/admin/blog/_menu.html.haml +13 -0
- data/app/views/workarea/admin/content_blocks/_blog_entry_id.html.haml +4 -0
- data/app/views/workarea/admin/content_blocks/_blog_id.html.haml +3 -0
- data/app/views/workarea/admin/content_blog_comments/_summary.html.haml +24 -0
- data/app/views/workarea/admin/content_blog_comments/edit.html.haml +60 -0
- data/app/views/workarea/admin/content_blog_comments/index.html.haml +49 -0
- data/app/views/workarea/admin/content_blog_entries/_aux_navigation.html.haml +4 -0
- data/app/views/workarea/admin/content_blog_entries/_cards.html.haml +113 -0
- data/app/views/workarea/admin/content_blog_entries/_summary.html.haml +10 -0
- data/app/views/workarea/admin/content_blog_entries/edit.html.haml +75 -0
- data/app/views/workarea/admin/content_blog_entries/index.html.haml +80 -0
- data/app/views/workarea/admin/content_blog_entries/index.json.jbuilder +5 -0
- data/app/views/workarea/admin/content_blog_entries/show.html.haml +20 -0
- data/app/views/workarea/admin/content_blog_entries/thumbnail_image.html.haml +55 -0
- data/app/views/workarea/admin/content_blogs/_aux_navigation.html.haml +2 -0
- data/app/views/workarea/admin/content_blogs/_cards.html.haml +58 -0
- data/app/views/workarea/admin/content_blogs/_summary.html.haml +6 -0
- data/app/views/workarea/admin/content_blogs/edit.html.haml +51 -0
- data/app/views/workarea/admin/content_blogs/index.html.haml +76 -0
- data/app/views/workarea/admin/content_blogs/index.json.jbuilder +4 -0
- data/app/views/workarea/admin/content_blogs/new.html.haml +33 -0
- data/app/views/workarea/admin/content_blogs/show.html.haml +19 -0
- data/app/views/workarea/admin/create_content_blog_entries/content.html.haml +28 -0
- data/app/views/workarea/admin/create_content_blog_entries/featured_products.html.haml +71 -0
- data/app/views/workarea/admin/create_content_blog_entries/publish.html.haml +51 -0
- data/app/views/workarea/admin/create_content_blog_entries/setup.html.haml +61 -0
- data/app/views/workarea/admin/create_content_blog_entries/thumbnail_image.html.haml +48 -0
- data/app/views/workarea/storefront/blog_comments/index.html.haml +31 -0
- data/app/views/workarea/storefront/blog_entries/_summary.html.haml +25 -0
- data/app/views/workarea/storefront/blog_entries/show.html.haml +85 -0
- data/app/views/workarea/storefront/blog_metadata/_publisher.html.haml +7 -0
- data/app/views/workarea/storefront/blogs/_blog_navigation.html.haml +7 -0
- data/app/views/workarea/storefront/blogs/index.html.haml +25 -0
- data/app/views/workarea/storefront/blogs/show.atom.builder +26 -0
- data/app/views/workarea/storefront/blogs/show.html.haml +31 -0
- data/app/views/workarea/storefront/content_blocks/_blog_entry.html.haml +20 -0
- data/app/workers/workarea/generate_content_metadata.decorator +15 -0
- data/bin/rails +18 -0
- data/config/initializers/appends.rb +26 -0
- data/config/initializers/content_block_types.rb +13 -0
- data/config/initializers/jump_to_navigation.rb +3 -0
- data/config/initializers/seeds.rb +5 -0
- data/config/initializers/workarea.rb +15 -0
- data/config/locales/en.yml +244 -0
- data/config/routes.rb +49 -0
- data/data/blog_thumbnails/thumbnail_1.png +0 -0
- data/data/blog_thumbnails/thumbnail_2.png +0 -0
- data/data/blog_thumbnails/thumbnail_3.png +0 -0
- data/lib/tasks/import_wordpress.rake +13 -0
- data/lib/tasks/import_wordpress_attachments.rake +18 -0
- data/lib/tasks/import_wordpress_pages.rake +21 -0
- data/lib/tasks/import_wordpress_posts.rake +25 -0
- data/lib/workarea/blog/engine.rb +8 -0
- data/lib/workarea/blog/import/wordpress/attachment.rb +40 -0
- data/lib/workarea/blog/import/wordpress/content_cleaner.rb +64 -0
- data/lib/workarea/blog/import/wordpress/entry.rb +76 -0
- data/lib/workarea/blog/import/wordpress/entry_parser.rb +64 -0
- data/lib/workarea/blog/import/wordpress/page.rb +69 -0
- data/lib/workarea/blog/import/wordpress/page_parser.rb +50 -0
- data/lib/workarea/blog/version.rb +5 -0
- data/lib/workarea/blog.rb +11 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/app/assets/images/.keep +0 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/concerns/.keep +0 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/jobs/application_job.rb +2 -0
- data/test/dummy/app/mailers/application_mailer.rb +4 -0
- data/test/dummy/app/models/concerns/.keep +0 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
- data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +34 -0
- data/test/dummy/bin/update +29 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/cable.yml +9 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +59 -0
- data/test/dummy/config/environments/production.rb +86 -0
- data/test/dummy/config/environments/test.rb +43 -0
- data/test/dummy/config/initializers/application_controller_renderer.rb +6 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +5 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/new_framework_defaults.rb +18 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/workarea.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/puma.rb +47 -0
- data/test/dummy/config/routes.rb +5 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config/spring.rb +6 -0
- data/test/dummy/config.ru +5 -0
- data/test/dummy/db/seeds.rb +2 -0
- data/test/dummy/lib/assets/.keep +0 -0
- data/test/dummy/log/.keep +0 -0
- data/test/factories/blog.rb +33 -0
- data/test/factories/wordpress_import.rb +17 -0
- data/test/fixtures/test_wordpress.xml +493 -0
- data/test/integration/workarea/blog/admin_integration_test.rb +55 -0
- data/test/integration/workarea/blog/create_blog_entries_integration_test.rb +106 -0
- data/test/integration/workarea/blog/storefront_integration_test.rb +112 -0
- data/test/integration/workarea/blog/wordpress_import_integration_test.rb +26 -0
- data/test/lib/workarea/blog/import/wordpress/attachment_test.rb +20 -0
- data/test/lib/workarea/blog/import/wordpress/content_cleaner_test.rb +65 -0
- data/test/lib/workarea/blog/import/wordpress/entry_parser_test.rb +42 -0
- data/test/lib/workarea/blog/import/wordpress/entry_test.rb +61 -0
- data/test/lib/workarea/blog/import/wordpress/page_parser_test.rb +35 -0
- data/test/lib/workarea/blog/import/wordpress/page_test.rb +52 -0
- data/test/models/workarea/content/blog_comment_test.rb +57 -0
- data/test/models/workarea/content/blog_entry_test.rb +17 -0
- data/test/queries/workarea/metadata/content_blog_entry_test.rb +36 -0
- data/test/queries/workarea/metadata/content_blog_test.rb +36 -0
- data/test/support/workarea/blog/stub_wordpress_assets.rb +19 -0
- data/test/system/workarea/admin/blog_entries_system_test.rb +103 -0
- data/test/system/workarea/admin/blog_system_test.rb +93 -0
- data/test/system/workarea/admin/blog_taxonomy_system_test.rb +21 -0
- data/test/system/workarea/admin/blog_user_comments_system_test.rb +138 -0
- data/test/system/workarea/storefront/blog_content_block_system_test.rb +36 -0
- data/test/system/workarea/storefront/blog_system_test.rb +256 -0
- data/test/test_helper.rb +9 -0
- data/test/view_models/workarea/admin/blog_comments_view_model_test.rb +77 -0
- data/test/view_models/workarea/admin/blog_entries_view_model_test.rb +36 -0
- data/test/view_models/workarea/storefront/blog_entry_content_block_view_model_test.rb +100 -0
- data/test/view_models/workarea/storefront/blog_entry_view_model_test.rb +47 -0
- data/test/view_models/workarea/storefront/blog_view_model_test.rb +149 -0
- data/test/workers/workarea/generate_content_blog_metadata_test.rb +18 -0
- data/workarea-blog.gemspec +19 -0
- metadata +274 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Workarea
|
|
4
|
+
module Admin
|
|
5
|
+
class BlogEntrySystemTest < Workarea::SystemTest
|
|
6
|
+
include Admin::IntegrationTest
|
|
7
|
+
|
|
8
|
+
setup :blog
|
|
9
|
+
|
|
10
|
+
def blog
|
|
11
|
+
@blog ||= create_blog(
|
|
12
|
+
name: 'Test Blog',
|
|
13
|
+
entries: [
|
|
14
|
+
{ name: 'Entry 1', author: 'Ben Crouse' },
|
|
15
|
+
{ name: 'Entry 2', author: 'Ben Crouse' }
|
|
16
|
+
]
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_creating_a_blog_entry
|
|
21
|
+
visit admin.content_blog_blog_entries_path(content_blog_id: blog)
|
|
22
|
+
|
|
23
|
+
click_link t('workarea.admin.content_blog_entries.index.new_blog_entry')
|
|
24
|
+
|
|
25
|
+
fill_in 'blog_entry[name]', with: 'Test Entry'
|
|
26
|
+
fill_in 'blog_entry[author]', with: 'Eric Pigeon'
|
|
27
|
+
fill_in 'blog_entry[summary]', with: 'A test blog entry'
|
|
28
|
+
|
|
29
|
+
click_button t('workarea.admin.create_content_blog_entries.setup.button')
|
|
30
|
+
|
|
31
|
+
create_asset(name: 'Test Asset', file: product_image_file, tag_list: 'foo,bar,baz')
|
|
32
|
+
click_link t('workarea.admin.content_blocks.asset.select_an_asset')
|
|
33
|
+
within '#takeover' do
|
|
34
|
+
click_link 'Test Asset'
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
click_button t('workarea.admin.create_content_blog_entries.thumbnail_image.button')
|
|
38
|
+
click_link t('workarea.admin.create_content_blog_entries.content.button')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_editing_attributes
|
|
42
|
+
entry = blog.entries.first
|
|
43
|
+
|
|
44
|
+
visit admin.edit_content_blog_entry_path(entry)
|
|
45
|
+
|
|
46
|
+
fill_in 'blog_entry[name]', with: 'Test Entry'
|
|
47
|
+
fill_in 'blog_entry[author]', with: 'Eric Pigeon'
|
|
48
|
+
fill_in 'blog_entry[summary]', with: 'A test blog entry'
|
|
49
|
+
|
|
50
|
+
click_button 'save_blog_entry'
|
|
51
|
+
|
|
52
|
+
assert(page.has_content?(t('workarea.admin.content_blog_entries.flash_messages.updated')))
|
|
53
|
+
assert(page.has_current_path?(admin.edit_content_blog_entry_path(entry)))
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_editing_thumbnail
|
|
57
|
+
entry = blog.entries.first
|
|
58
|
+
|
|
59
|
+
visit admin.thumbnail_image_content_blog_entry_path(entry)
|
|
60
|
+
|
|
61
|
+
click_button 'save_blog_entry'
|
|
62
|
+
|
|
63
|
+
assert(page.has_content?(t('workarea.admin.content_blog_entries.flash_messages.updated')))
|
|
64
|
+
assert(page.has_current_path?(admin.thumbnail_image_content_blog_entry_path(entry)))
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def test_deleting_a_blog_entry
|
|
68
|
+
visit admin.content_blog_entry_path(blog.entries.first)
|
|
69
|
+
click_link t('workarea.admin.actions.delete')
|
|
70
|
+
|
|
71
|
+
assert page.has_text?(t('workarea.admin.content_blog_entries.flash_messages.deleted'))
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_importing_and_exporting
|
|
75
|
+
file = create_tempfile(
|
|
76
|
+
DataFile::Csv.new.serialize(blog.entries),
|
|
77
|
+
extension: 'csv'
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
visit admin.content_blog_blog_entries_path(content_blog_id: blog)
|
|
81
|
+
click_link t('workarea.admin.shared.bulk_actions.import')
|
|
82
|
+
attach_file 'import[file]', file.path
|
|
83
|
+
click_button 'create_import'
|
|
84
|
+
|
|
85
|
+
assert_current_path(admin.content_blog_blog_entries_path(content_blog_id: blog))
|
|
86
|
+
assert(page.has_content?('Success'))
|
|
87
|
+
|
|
88
|
+
click_button t('workarea.admin.shared.bulk_actions.export')
|
|
89
|
+
|
|
90
|
+
Workarea.config.data_file_formats[1..-1].each do |format|
|
|
91
|
+
click_link format.upcase
|
|
92
|
+
assert(page.has_content?(format.upcase))
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
fill_in 'export[emails_list]', with: 'bcrouse@weblinc.com'
|
|
96
|
+
click_button 'create_export'
|
|
97
|
+
|
|
98
|
+
assert_current_path(admin.content_blog_blog_entries_path(content_blog_id: blog))
|
|
99
|
+
assert(page.has_content?('Success'))
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Workarea
|
|
4
|
+
module Admin
|
|
5
|
+
class BlogSystemTest < Workarea::SystemTest
|
|
6
|
+
include Admin::IntegrationTest
|
|
7
|
+
|
|
8
|
+
setup :blog
|
|
9
|
+
|
|
10
|
+
def blog
|
|
11
|
+
@blog ||= create_blog(
|
|
12
|
+
name: 'Test Blog',
|
|
13
|
+
entries: [
|
|
14
|
+
{ name: 'Entry 1', author: 'Ben Crouse' },
|
|
15
|
+
{ name: 'Entry 2', author: 'Ben Crouse' }
|
|
16
|
+
]
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_creating_a_blog
|
|
21
|
+
visit admin.content_blogs_path
|
|
22
|
+
click_link 'add_blog'
|
|
23
|
+
|
|
24
|
+
fill_in 'blog_name', with: 'New Blog'
|
|
25
|
+
click_button 'save_blog'
|
|
26
|
+
assert(page.has_content?('Success'))
|
|
27
|
+
|
|
28
|
+
visit admin.content_blogs_path
|
|
29
|
+
assert(page.has_content?('New Blog'))
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def test_managing_blogs
|
|
33
|
+
visit admin.content_blog_path(blog)
|
|
34
|
+
click_link t('workarea.admin.cards.attributes.title')
|
|
35
|
+
|
|
36
|
+
fill_in 'blog_name', with: 'Edited Test Blog'
|
|
37
|
+
click_button 'save_blog'
|
|
38
|
+
assert(page.has_content?('Success'))
|
|
39
|
+
|
|
40
|
+
visit admin.content_blogs_path
|
|
41
|
+
assert(page.has_content?('Edited Test Blog'))
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def test_deleting_blogs
|
|
45
|
+
visit admin.content_blogs_path
|
|
46
|
+
click_link 'Test Blog'
|
|
47
|
+
|
|
48
|
+
visit admin.content_blog_path(blog)
|
|
49
|
+
|
|
50
|
+
click_link t('workarea.admin.actions.delete')
|
|
51
|
+
assert(page.has_content?('Success'))
|
|
52
|
+
|
|
53
|
+
assert(page.has_no_content?('Edited Test Blog'))
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def test_shows_the_admin_toolbar_for_blogs
|
|
57
|
+
visit admin.toolbar_path(id: blog.to_global_id.to_param)
|
|
58
|
+
click_link 'View Test Blog admin'
|
|
59
|
+
assert(page.has_current_path?(admin.content_blog_path(blog)))
|
|
60
|
+
|
|
61
|
+
visit admin.toolbar_path(id: blog.to_global_id.to_param)
|
|
62
|
+
click_link t('workarea.admin.toolbar.edit_content')
|
|
63
|
+
assert(page.has_current_path?(admin.edit_content_path(Content.for(blog))))
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_importing_and_exporting
|
|
67
|
+
blogs = Array.new(2) { |i| create_blog }
|
|
68
|
+
file = create_tempfile(DataFile::Csv.new.serialize(blogs), extension: 'csv')
|
|
69
|
+
|
|
70
|
+
visit admin.content_blogs_path
|
|
71
|
+
click_link t('workarea.admin.shared.bulk_actions.import')
|
|
72
|
+
attach_file 'import[file]', file.path
|
|
73
|
+
click_button 'create_import'
|
|
74
|
+
|
|
75
|
+
assert_current_path(admin.content_blogs_path)
|
|
76
|
+
assert(page.has_content?('Success'))
|
|
77
|
+
|
|
78
|
+
click_button t('workarea.admin.shared.bulk_actions.export')
|
|
79
|
+
|
|
80
|
+
Workarea.config.data_file_formats[1..-1].each do |format|
|
|
81
|
+
click_link format.upcase
|
|
82
|
+
assert(page.has_content?(format.upcase))
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
fill_in 'export[emails_list]', with: 'bcrouse@weblinc.com'
|
|
86
|
+
click_button 'create_export'
|
|
87
|
+
|
|
88
|
+
assert_current_path(admin.content_blogs_path)
|
|
89
|
+
assert(page.has_content?('Success'))
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Workarea
|
|
4
|
+
module Admin
|
|
5
|
+
class BlogTaxonomySystemTest < Workarea::SystemTest
|
|
6
|
+
include Admin::IntegrationTest
|
|
7
|
+
|
|
8
|
+
def test_blog_and_blog_entry_can_be_added_as_taxon
|
|
9
|
+
visit admin.navigation_taxons_path
|
|
10
|
+
find('.menu-editor__add-item-button--last-position').click
|
|
11
|
+
|
|
12
|
+
assert(page.has_content?('Add Taxonomy'))
|
|
13
|
+
|
|
14
|
+
dropdown = page.find('#navigable_type')
|
|
15
|
+
options = dropdown.all('option').map(&:text)
|
|
16
|
+
assert_includes(options, 'Blog')
|
|
17
|
+
assert_includes(options, 'Blog Entry')
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Workarea
|
|
4
|
+
module Admin
|
|
5
|
+
class BlogUserCommentsSystemTest < Workarea::SystemTest
|
|
6
|
+
include Admin::IntegrationTest
|
|
7
|
+
|
|
8
|
+
setup :blog
|
|
9
|
+
|
|
10
|
+
def blog
|
|
11
|
+
@blog ||= create_blog(
|
|
12
|
+
name: 'Test Blog',
|
|
13
|
+
entries: [
|
|
14
|
+
{ name: 'Entry 1', author: 'Ben Crouse' },
|
|
15
|
+
{ name: 'Entry 2', author: 'Ben Crouse' }
|
|
16
|
+
]
|
|
17
|
+
)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_approving_comments
|
|
21
|
+
blog_entry = blog.entries.first
|
|
22
|
+
blog_entry.comments.create!(
|
|
23
|
+
user_id: Workarea::User.first.id,
|
|
24
|
+
user_info: 'UC',
|
|
25
|
+
body: 'test test test',
|
|
26
|
+
pending: true
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
visit admin.content_blog_user_comments_path
|
|
30
|
+
|
|
31
|
+
assert(page.has_content?('Blog Entry'))
|
|
32
|
+
assert(page.has_content?('Pending'))
|
|
33
|
+
|
|
34
|
+
click_link('Edit')
|
|
35
|
+
|
|
36
|
+
find('label[for=blog_comment_approved_true]').click
|
|
37
|
+
click_button 'save_blog_comment'
|
|
38
|
+
|
|
39
|
+
assert(page.has_content?('Success'))
|
|
40
|
+
assert(page.has_no_content?('Pending'))
|
|
41
|
+
|
|
42
|
+
visit admin.activity_path
|
|
43
|
+
assert(page.has_content?('blog comment'))
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_deleting_a_comment
|
|
47
|
+
blog_entry = blog.entries.first
|
|
48
|
+
blog_entry.comments.create!(
|
|
49
|
+
user_id: Workarea::User.first.id,
|
|
50
|
+
user_info: 'UC',
|
|
51
|
+
body: 'Test Comment',
|
|
52
|
+
pending: true,
|
|
53
|
+
updated_at: Time.now - 2.days
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
visit admin.content_blog_user_comments_path
|
|
57
|
+
|
|
58
|
+
within '.comments__comment', match: :first do
|
|
59
|
+
click_button('Delete')
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
assert(page.has_content?(t('workarea.admin.content_blogs_comments.flash_messages.destroyed')))
|
|
63
|
+
assert(page.has_no_content?('Test Comment'))
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_view_and_sort_comments_for_only_that_blog_entry
|
|
67
|
+
blog.entries.first.comments.create!(
|
|
68
|
+
user_id: Workarea::User.first.id,
|
|
69
|
+
body: 'One Thought',
|
|
70
|
+
approved: false,
|
|
71
|
+
pending: true,
|
|
72
|
+
updated_at: Time.now - 1.day
|
|
73
|
+
)
|
|
74
|
+
blog.entries.first.comments.create!(
|
|
75
|
+
user_id: Workarea::User.first.id,
|
|
76
|
+
body: 'Two Thoughts',
|
|
77
|
+
approved: false,
|
|
78
|
+
pending: true,
|
|
79
|
+
created_at: Time.now - 2.days
|
|
80
|
+
)
|
|
81
|
+
blog.entries.last.comments.create!(
|
|
82
|
+
user_id: Workarea::User.first.id,
|
|
83
|
+
body: 'Comment For Another Entry',
|
|
84
|
+
approved: false,
|
|
85
|
+
pending: true,
|
|
86
|
+
created_at: Time.now - 1.day
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
entry = blog.entries.order_by(:created_at.asc).first
|
|
90
|
+
|
|
91
|
+
visit admin.content_blog_user_comments_path(content_blog_entry_id: entry.slug)
|
|
92
|
+
|
|
93
|
+
assert(page.has_content?('One Thought'))
|
|
94
|
+
assert(page.has_no_content?('First Comment'))
|
|
95
|
+
|
|
96
|
+
select 'Newest', from: 'sort'
|
|
97
|
+
|
|
98
|
+
assert(page.has_no_content?('Comment For Another Entry'))
|
|
99
|
+
assert(page.has_ordered_text?('One Thought', 'Two Thoughts'))
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def test_importing_and_exporting
|
|
103
|
+
entry = blog.entries.first
|
|
104
|
+
comments = Array.new(2) do |i|
|
|
105
|
+
entry.comments.create!(
|
|
106
|
+
user_id: Workarea::User.first.id,
|
|
107
|
+
user_info: 'UC',
|
|
108
|
+
body: 'test test test',
|
|
109
|
+
pending: true
|
|
110
|
+
)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
file = create_tempfile(DataFile::Csv.new.serialize(comments), extension: 'csv')
|
|
114
|
+
|
|
115
|
+
visit admin.content_blog_user_comments_path(content_blog_entry_id: entry.slug)
|
|
116
|
+
click_link t('workarea.admin.shared.bulk_actions.import')
|
|
117
|
+
attach_file 'import[file]', file.path
|
|
118
|
+
click_button 'create_import'
|
|
119
|
+
|
|
120
|
+
assert_current_path(admin.content_blog_user_comments_path(content_blog_entry_id: entry.slug))
|
|
121
|
+
assert(page.has_content?('Success'))
|
|
122
|
+
|
|
123
|
+
click_link t('workarea.admin.shared.bulk_actions.export')
|
|
124
|
+
|
|
125
|
+
Workarea.config.data_file_formats[1..-1].each do |format|
|
|
126
|
+
click_link format.upcase
|
|
127
|
+
assert(page.has_content?(format.upcase))
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
fill_in 'export[emails_list]', with: 'bcrouse@weblinc.com'
|
|
131
|
+
click_button 'create_export'
|
|
132
|
+
|
|
133
|
+
assert_current_path(admin.content_blog_user_comments_path(content_blog_entry_id: entry.slug))
|
|
134
|
+
assert(page.has_content?('Success'))
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Workarea
|
|
4
|
+
module Storefront
|
|
5
|
+
class BlogContentBlockSystemTest < Workarea::SystemTest
|
|
6
|
+
include BreakpointHelpers
|
|
7
|
+
setup :set_content_page
|
|
8
|
+
|
|
9
|
+
def set_content_page
|
|
10
|
+
@content_page = create_page(name: 'Integration Page')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def test_blog_entry_content_block
|
|
14
|
+
blog = create_blog(name: 'Test')
|
|
15
|
+
|
|
16
|
+
blog.entries.create!(name: 'Test', author: 'BC', summary: 'Summary text')
|
|
17
|
+
|
|
18
|
+
content = Content.for(@content_page)
|
|
19
|
+
content.blocks.build(
|
|
20
|
+
type: :blog_entry,
|
|
21
|
+
data: {
|
|
22
|
+
number_of_entries: '1',
|
|
23
|
+
use_manual_entries: 'true',
|
|
24
|
+
blog_entry: [blog.entries.first.id]
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
content.save!
|
|
28
|
+
|
|
29
|
+
visit storefront.page_path(@content_page)
|
|
30
|
+
assert(page.has_content?(blog.entries.first.name))
|
|
31
|
+
assert(page.has_content?(blog.entries.first.author))
|
|
32
|
+
assert(page.has_content?(blog.entries.first.summary))
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
module Workarea
|
|
4
|
+
module Storefront
|
|
5
|
+
class BlogSystemTest < Workarea::SystemTest
|
|
6
|
+
include Storefront::SystemTest
|
|
7
|
+
|
|
8
|
+
setup :blog
|
|
9
|
+
setup :set_entries_on_index
|
|
10
|
+
teardown :unset_entries_on_index
|
|
11
|
+
|
|
12
|
+
def blog
|
|
13
|
+
@blog ||= create_blog(
|
|
14
|
+
entries: [
|
|
15
|
+
{ name: 'Entry 1', author: 'Ben Crouse', summary: 'A short summary about the entry' },
|
|
16
|
+
{ name: 'Entry 2', author: 'Ben Crouse', summary: 'A different summary for this entry' }
|
|
17
|
+
]
|
|
18
|
+
)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def set_entries_on_index
|
|
22
|
+
@blog_entries_on_index = Workarea.config.blog_entries_on_index
|
|
23
|
+
Workarea.config.blog_entries_on_index = 4
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def unset_entries_on_index
|
|
27
|
+
Workarea.config.blog_entries_on_index = @blog_entries_on_index
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_display
|
|
31
|
+
visit storefront.blog_path(blog)
|
|
32
|
+
|
|
33
|
+
assert(page.has_content?('Entry 1'))
|
|
34
|
+
assert(page.has_content?('A short summary about the entry'))
|
|
35
|
+
assert(page.has_content?('Entry 2'))
|
|
36
|
+
assert(page.has_content?('A different summary for this entry'))
|
|
37
|
+
|
|
38
|
+
entry_content = Workarea::Content.for(blog.entries.first)
|
|
39
|
+
entry_content.blocks.build(
|
|
40
|
+
area: :blog_content,
|
|
41
|
+
type: :text,
|
|
42
|
+
data: { text: 'Body' }
|
|
43
|
+
)
|
|
44
|
+
entry_content.save!
|
|
45
|
+
|
|
46
|
+
click_link 'Entry 1'
|
|
47
|
+
|
|
48
|
+
assert(page.has_current_path?(storefront.blog_entry_path(blog.entries.first)))
|
|
49
|
+
assert(page.has_content?('Entry 1'))
|
|
50
|
+
assert(page.has_content?('Body'))
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_blog_index
|
|
54
|
+
create_blog(
|
|
55
|
+
entries: [
|
|
56
|
+
{
|
|
57
|
+
name: 'Entry 1',
|
|
58
|
+
author: 'Ben Crouse',
|
|
59
|
+
summary: 'A short summary about the entry',
|
|
60
|
+
written_at: Time.now - 1.day
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
name: 'Entry 2',
|
|
64
|
+
author: 'Ben Crouse',
|
|
65
|
+
summary: 'A different summary for this entry',
|
|
66
|
+
written_at: Time.now - 2.day
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
name: 'Entry 3',
|
|
70
|
+
author: 'Ben Crouse',
|
|
71
|
+
summary: 'This is the third post',
|
|
72
|
+
written_at: Time.now - 3.day
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: 'Entry 4',
|
|
76
|
+
author: 'Ben Crouse',
|
|
77
|
+
summary: 'This post should not be shown on index',
|
|
78
|
+
written_at: Time.now - 4.day
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'Entry 5',
|
|
82
|
+
author: 'Ben Crouse',
|
|
83
|
+
summary: 'This post is featured and should show first',
|
|
84
|
+
written_at: Time.now - 5.day,
|
|
85
|
+
featured: true
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
visit storefront.blogs_path
|
|
91
|
+
|
|
92
|
+
assert(page.has_content?('Test Blog'))
|
|
93
|
+
|
|
94
|
+
assert(page.has_content?('Entry 5'))
|
|
95
|
+
assert(page.has_content?('This post is featured and should show first'))
|
|
96
|
+
assert(page.has_content?('Entry 1'))
|
|
97
|
+
assert(page.has_content?('A short summary about the entry'))
|
|
98
|
+
assert(page.has_content?('Entry 2'))
|
|
99
|
+
assert(page.has_content?('A different summary for this entry'))
|
|
100
|
+
assert(page.has_content?('Entry 3'))
|
|
101
|
+
assert(page.has_content?('This is the third post'))
|
|
102
|
+
|
|
103
|
+
assert(page.has_no_content?('Entry 4'))
|
|
104
|
+
assert(page.has_no_content?('And this is the fourth post'))
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def test_tags
|
|
108
|
+
blog = create_blog(
|
|
109
|
+
entries: [
|
|
110
|
+
{ name: 'Entry 1', author: 'Ben Crouse' },
|
|
111
|
+
{ name: 'Entry 2', author: 'Ben Crouse', tag_list: 'foo,bar' }
|
|
112
|
+
]
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
visit storefront.blog_path(blog)
|
|
116
|
+
|
|
117
|
+
assert(page.has_content?('foo (1)'))
|
|
118
|
+
assert(page.has_content?('bar (1)'))
|
|
119
|
+
|
|
120
|
+
click_link 'foo (1)'
|
|
121
|
+
|
|
122
|
+
assert(page.has_content?('Entry 2'))
|
|
123
|
+
assert(page.has_no_content?('Entry 1'))
|
|
124
|
+
|
|
125
|
+
visit storefront.blog_entry_path(blog.entries.first)
|
|
126
|
+
|
|
127
|
+
assert(page.has_content?('foo (1)'))
|
|
128
|
+
assert(page.has_content?('bar (1)'))
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def test_related_products
|
|
132
|
+
create_product(
|
|
133
|
+
name: 'Related Product',
|
|
134
|
+
id: 'product_1',
|
|
135
|
+
variants: [
|
|
136
|
+
{ sku: 'SKU1', regular: 10.to_m },
|
|
137
|
+
{ sku: 'SKU2', regular: 20.to_m }
|
|
138
|
+
]
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
blog = create_blog(
|
|
142
|
+
entries: [
|
|
143
|
+
{ name: 'Entry 2', author: 'Ben Crouse', product_ids: ['product_1'] }
|
|
144
|
+
]
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
visit storefront.blog_entry_path(blog.entries.first)
|
|
148
|
+
|
|
149
|
+
assert(page.has_content?(/Related Product/i))
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def test_comments
|
|
153
|
+
blog = create_blog(
|
|
154
|
+
entries: [
|
|
155
|
+
{ name: 'Entry 1', author: 'Ben Crouse' }
|
|
156
|
+
]
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
create_user(email: 'test@workarea.com', password: 'w3bl1nc', name: 'Ben Crouse')
|
|
160
|
+
visit storefront.login_path
|
|
161
|
+
|
|
162
|
+
within '#login_form' do
|
|
163
|
+
fill_in 'email', with: 'test@workarea.com'
|
|
164
|
+
fill_in 'password', with: 'w3bl1nc'
|
|
165
|
+
click_button 'login'
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
visit storefront.blog_entry_path(blog.entries.first)
|
|
169
|
+
fill_in 'body', with: 'test comment'
|
|
170
|
+
click_button 'submit_comment'
|
|
171
|
+
|
|
172
|
+
assert_equal(storefront.blog_entry_path(blog.entries.first), current_path)
|
|
173
|
+
assert(page.has_content?('Success'))
|
|
174
|
+
|
|
175
|
+
Workarea::Content::BlogComment.first.update_attributes(approved: true)
|
|
176
|
+
|
|
177
|
+
clear_driver_cache if respond_to?(:clear_driver_cache)
|
|
178
|
+
visit storefront.blog_entry_path(blog.entries.first)
|
|
179
|
+
assert(page.has_content?('test comment'))
|
|
180
|
+
|
|
181
|
+
assert(page.has_content?('1 Comment'))
|
|
182
|
+
|
|
183
|
+
visit storefront.blog_entry_path(blog.entries.first)
|
|
184
|
+
fill_in 'body', with: 'test comment 2'
|
|
185
|
+
click_button 'submit_comment'
|
|
186
|
+
|
|
187
|
+
assert_equal(storefront.blog_entry_path(blog.entries.first), current_path)
|
|
188
|
+
assert(page.has_content?('Success'))
|
|
189
|
+
|
|
190
|
+
Workarea::Content::BlogComment
|
|
191
|
+
.where(body: 'test comment 2')
|
|
192
|
+
.first
|
|
193
|
+
.update_attributes!(approved: true)
|
|
194
|
+
|
|
195
|
+
clear_driver_cache if respond_to?(:clear_driver_cache)
|
|
196
|
+
visit storefront.blog_entry_path(blog.entries.first)
|
|
197
|
+
|
|
198
|
+
assert(page.has_content?('test comment 2'))
|
|
199
|
+
assert(page.has_content?('2 Comments'))
|
|
200
|
+
|
|
201
|
+
Workarea::Content::BlogComment
|
|
202
|
+
.where(body: 'test comment')
|
|
203
|
+
.first
|
|
204
|
+
.destroy
|
|
205
|
+
|
|
206
|
+
clear_driver_cache if respond_to?(:clear_driver_cache)
|
|
207
|
+
visit storefront.blog_entry_path(blog.entries.first)
|
|
208
|
+
assert(page.has_content?('test comment 2'))
|
|
209
|
+
assert(page.has_content?('1 Comment'))
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
def test_featured_blog_entries_display_first
|
|
213
|
+
blog = create_blog(
|
|
214
|
+
entries: [
|
|
215
|
+
{
|
|
216
|
+
name: 'entry',
|
|
217
|
+
author: 'jberesford',
|
|
218
|
+
slug: 'entry-slug',
|
|
219
|
+
featured: false
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
name: 'featured entry',
|
|
223
|
+
author: 'jberesford',
|
|
224
|
+
slug: 'featured-entry-slug',
|
|
225
|
+
featured: true
|
|
226
|
+
}
|
|
227
|
+
]
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
visit storefront.blog_path(blog)
|
|
231
|
+
|
|
232
|
+
assert_match(/featured entry.*entry/m, page.html)
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def test_showing_a_featured_blog_entry_content_block
|
|
236
|
+
content_page = create_page(name: 'Integration Page')
|
|
237
|
+
entry = blog.entries.first
|
|
238
|
+
|
|
239
|
+
content = Content.for(content_page)
|
|
240
|
+
content.blocks.build(
|
|
241
|
+
type: :blog_entry,
|
|
242
|
+
data: {
|
|
243
|
+
use_manual_entries: 'true',
|
|
244
|
+
blog_entry: [entry.id]
|
|
245
|
+
}
|
|
246
|
+
)
|
|
247
|
+
content.save!
|
|
248
|
+
|
|
249
|
+
visit storefront.page_path(content_page)
|
|
250
|
+
|
|
251
|
+
assert(page.has_content?('Entry 1'))
|
|
252
|
+
assert(page.has_content?('A short summary about the entry'))
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
end
|
|
256
|
+
end
|
data/test/test_helper.rb
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Configure Rails Environment
|
|
2
|
+
ENV['RAILS_ENV'] = 'test'
|
|
3
|
+
require File.expand_path('../../test/dummy/config/environment.rb', __FILE__)
|
|
4
|
+
require 'rails/test_help'
|
|
5
|
+
require 'workarea/test_help'
|
|
6
|
+
# Filter out Minitest backtrace while allowing backtrace from other libraries
|
|
7
|
+
# to be shown.
|
|
8
|
+
Minitest.backtrace_filter = Minitest::BacktraceFilter.new
|
|
9
|
+
require 'factories/blog'
|