workarea-blog 3.4.7
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|