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,77 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Admin
|
5
|
+
class BlogCommentsViewModelTest < TestCase
|
6
|
+
setup :blog
|
7
|
+
|
8
|
+
def blog
|
9
|
+
@blog ||= create_blog(name: 'Test Blog',
|
10
|
+
entries: [
|
11
|
+
{
|
12
|
+
name: 'Entry 1',
|
13
|
+
author: 'BC',
|
14
|
+
slug: 'entry1',
|
15
|
+
summary: 'A short summary about the entry'
|
16
|
+
},
|
17
|
+
{
|
18
|
+
name: 'Entry 2',
|
19
|
+
author: 'BC',
|
20
|
+
slug: 'entry2',
|
21
|
+
summary: 'A different summary for this entry'
|
22
|
+
}
|
23
|
+
])
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_comments_filters_by_entry_if_passed
|
27
|
+
view_model = Workarea::Admin::BlogCommentsViewModel.new(
|
28
|
+
nil,
|
29
|
+
content_blog_entry_id: @blog.entries.second.slug
|
30
|
+
)
|
31
|
+
|
32
|
+
assert_equal(0, view_model.comments.length)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_comments_returns_all_comments_if_not_filter_by_entry
|
36
|
+
blog_comment = @blog.entries.first.comments.create!(
|
37
|
+
user_id: 'userid',
|
38
|
+
user_info: 'UC',
|
39
|
+
body: 'Great writer! A+++++++. Will read again.'
|
40
|
+
)
|
41
|
+
|
42
|
+
view_model = Workarea::Admin::BlogCommentsViewModel.new(nil)
|
43
|
+
|
44
|
+
assert_equal(1, view_model.comments.length)
|
45
|
+
assert_equal(blog_comment, view_model.comments.first)
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_entry_returns_the_entry_when_we_are_filtering_by_entry
|
49
|
+
view_model = Workarea::Admin::BlogCommentsViewModel.new(
|
50
|
+
nil,
|
51
|
+
content_blog_entry_id: @blog.entries.first.slug
|
52
|
+
)
|
53
|
+
|
54
|
+
assert_equal(@blog.entries.first, view_model.blog_entry)
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_entry_does_not_return_the_entry_if_we_are_not_filtering_by_entry
|
58
|
+
view_model = Workarea::Admin::BlogCommentsViewModel.new(nil)
|
59
|
+
assert_nil(view_model.blog_entry)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_blog_returns_the_blog_when_we_are_filtering_by_entry
|
63
|
+
view_model = Workarea::Admin::BlogCommentsViewModel.new(
|
64
|
+
nil,
|
65
|
+
content_blog_entry_id: @blog.entries.first.slug
|
66
|
+
)
|
67
|
+
|
68
|
+
assert_equal(@blog, view_model.blog)
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_blog_does_not_return_the_blog_if_we_are_not_filtering_by_entry
|
72
|
+
view_model = Workarea::Admin::BlogCommentsViewModel.new(nil)
|
73
|
+
assert_nil(view_model.blog)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Blog
|
5
|
+
module Admin
|
6
|
+
class BlogEntriesViewModelTest < TestCase
|
7
|
+
setup :create_blog_1
|
8
|
+
setup :create_blog_2
|
9
|
+
|
10
|
+
def create_blog_1
|
11
|
+
@blog ||= create_blog(name: 'Test',
|
12
|
+
slug: 'test',
|
13
|
+
entries: [{ name: 'Entry', author: 'BC' }])
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_blog_2
|
17
|
+
create_blog(name: 'Test2',
|
18
|
+
slug: 'test2',
|
19
|
+
entries: [{ name: 'Entry2', author: 'BC' }])
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_entries_only_shows_entries_for_this_blog
|
23
|
+
view_model = Workarea::Admin::BlogEntriesViewModel.new(nil, content_blog_id: @blog.slug)
|
24
|
+
|
25
|
+
assert_equal(1, view_model.entries.length)
|
26
|
+
assert_equal(Workarea::Storefront::BlogEntryViewModel.new(@blog.entries.first), view_model.entries.first)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_blog_should_return_the_blog
|
30
|
+
view_model = Workarea::Admin::BlogEntriesViewModel.new(nil, content_blog_id: @blog.slug)
|
31
|
+
assert_equal(@blog, view_model.blog)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Storefront
|
5
|
+
class BlogEntryContentBlockViewModelTest < TestCase
|
6
|
+
setup :blog
|
7
|
+
setup :create_blog_entries
|
8
|
+
|
9
|
+
def blog
|
10
|
+
@blog ||= create_blog(name: 'Test')
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_blog_entries
|
14
|
+
4.times { @blog.entries.create!(name: 'Test', author: 'BC') }
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_returns_a_blog_and_entry_object
|
18
|
+
content = create_content
|
19
|
+
block = content.blocks.create!(
|
20
|
+
area: 'body',
|
21
|
+
type_id: 'blog_entry',
|
22
|
+
data: {
|
23
|
+
use_manual_entries: 'true',
|
24
|
+
blog_entry: [@blog.entries.first.id]
|
25
|
+
}
|
26
|
+
)
|
27
|
+
|
28
|
+
view_model = ContentBlocks::BlogEntryContentBlockViewModel.new(block)
|
29
|
+
|
30
|
+
assert_instance_of(Workarea::Storefront::BlogEntryViewModel, view_model.locals[:entries].first)
|
31
|
+
assert_instance_of(Workarea::Storefront::BlogViewModel, view_model.locals[:entries].first.blog)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_returns_most_recent_blog_entry_by_default
|
35
|
+
content = create_content
|
36
|
+
block = content.blocks.create!(
|
37
|
+
area: 'body',
|
38
|
+
type_id: 'blog_entry',
|
39
|
+
data: {
|
40
|
+
number_of_entries: '1',
|
41
|
+
use_manual_entries: 'false'
|
42
|
+
}
|
43
|
+
)
|
44
|
+
view_model = ContentBlocks::BlogEntryContentBlockViewModel.new(block)
|
45
|
+
|
46
|
+
assert_equal(@blog.entries.last.id, view_model.locals[:entries].first.id)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_can_return_multiple_recent_blog_entries
|
50
|
+
content = create_content
|
51
|
+
block = content.blocks.create!(
|
52
|
+
area: 'body',
|
53
|
+
type_id: 'blog_entry',
|
54
|
+
data: {
|
55
|
+
number_of_entries: '3',
|
56
|
+
use_manual_entries: 'false'
|
57
|
+
}
|
58
|
+
)
|
59
|
+
view_model = ContentBlocks::BlogEntryContentBlockViewModel.new(block)
|
60
|
+
|
61
|
+
assert_equal(3, view_model.locals[:entries].count)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_can_return_recent_blog_entries_for_a_specific_blog
|
65
|
+
new_blog = create_blog(name: 'New Blog')
|
66
|
+
new_blog.entries.create!(name: 'New Post', author: 'BC')
|
67
|
+
|
68
|
+
content = create_content
|
69
|
+
block = content.blocks.create!(
|
70
|
+
area: 'body',
|
71
|
+
type_id: 'blog_entry',
|
72
|
+
data: {
|
73
|
+
blog: new_blog.id,
|
74
|
+
number_of_entries: '1',
|
75
|
+
use_manual_entries: 'false'
|
76
|
+
}
|
77
|
+
)
|
78
|
+
view_model = ContentBlocks::BlogEntryContentBlockViewModel.new(block)
|
79
|
+
|
80
|
+
assert_equal(1, view_model.locals[:entries].count)
|
81
|
+
assert_equal(new_blog.id, view_model.locals[:entries].first.blog.id)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_can_return_multiple_manually_selected_entries
|
85
|
+
content = create_content
|
86
|
+
block = content.blocks.create!(
|
87
|
+
area: 'body',
|
88
|
+
type_id: 'blog_entry',
|
89
|
+
data: {
|
90
|
+
use_manual_entries: 'true',
|
91
|
+
blog_entry: [@blog.entries.first.id, @blog.entries.second.id]
|
92
|
+
}
|
93
|
+
)
|
94
|
+
|
95
|
+
view_model = ContentBlocks::BlogEntryContentBlockViewModel.new(block)
|
96
|
+
assert_equal(2, view_model.locals[:entries].count)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Storefront
|
5
|
+
module Blog
|
6
|
+
class BlogEntryViewModelTest < TestCase
|
7
|
+
def test_comments_only_shows_approved_comments
|
8
|
+
blog = create_blog(
|
9
|
+
entries: [{
|
10
|
+
name: 'Test Entry',
|
11
|
+
comments: [
|
12
|
+
{ user_id: user.id },
|
13
|
+
{ user_id: user.id, approved: true }
|
14
|
+
]
|
15
|
+
}]
|
16
|
+
)
|
17
|
+
|
18
|
+
view_model = Workarea::Storefront::BlogEntryViewModel.new(blog.entries.first)
|
19
|
+
|
20
|
+
assert_equal(1, view_model.comments.length)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_products
|
24
|
+
3.times.map { |id| create_product(id: id) }
|
25
|
+
|
26
|
+
product_ids = [1, 2, 0].map(&:to_s)
|
27
|
+
blog = create_blog(
|
28
|
+
entries: [{
|
29
|
+
name: 'Test Entry',
|
30
|
+
product_ids: product_ids
|
31
|
+
}]
|
32
|
+
)
|
33
|
+
entry = blog.entries.first
|
34
|
+
view_model = Workarea::Storefront::BlogEntryViewModel.new(entry)
|
35
|
+
|
36
|
+
assert_equal(product_ids, view_model.products.map(&:id))
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def user
|
42
|
+
@user ||= create_user
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Blog
|
5
|
+
module Storefront
|
6
|
+
class BlogViewModelTest < TestCase
|
7
|
+
setup :blog
|
8
|
+
setup :set_blog_entries_on_index
|
9
|
+
teardown :reset_blog_entries_on_index
|
10
|
+
|
11
|
+
def blog
|
12
|
+
@blog ||= create_blog(name: 'Test', slug: 'test')
|
13
|
+
end
|
14
|
+
|
15
|
+
def set_blog_entries_on_index
|
16
|
+
@blog_entries_on_index = Workarea.config.blog_entries_on_index
|
17
|
+
Workarea.config.blog_entries_on_index = 4
|
18
|
+
end
|
19
|
+
|
20
|
+
def reset_blog_entries_on_index
|
21
|
+
Workarea.config.blog_entries_on_index = @blog_entries_on_index
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_entries_paginates
|
25
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog)
|
26
|
+
|
27
|
+
tmp = Workarea::Storefront::BlogViewModel.per_page
|
28
|
+
Workarea::Storefront::BlogViewModel.per_page = 1
|
29
|
+
|
30
|
+
3.times { @blog.entries.create!(name: 'Test', author: 'BC') }
|
31
|
+
|
32
|
+
assert_equal(1, view_model.entries.size)
|
33
|
+
assert_equal(1, view_model.entries.current_page)
|
34
|
+
assert_instance_of(Workarea::Storefront::BlogEntryViewModel, view_model.entries.first)
|
35
|
+
|
36
|
+
Workarea::Storefront::BlogViewModel.per_page = tmp
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_entries_filters_on_tag
|
40
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog)
|
41
|
+
|
42
|
+
@blog.entries.create!(name: 'Test', author: 'BC', tag_list: 'foo')
|
43
|
+
@blog.entries.create!(name: 'Test', author: 'BC', tag_list: 'bar')
|
44
|
+
|
45
|
+
view_model.options[:tag] = 'foo'
|
46
|
+
assert_equal(1, view_model.entries.size)
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_entries_only_returns_active_entries
|
50
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog)
|
51
|
+
|
52
|
+
@blog.entries.create!(name: 'Active Entry', author: 'BC', tag_list: 'baz', active: true)
|
53
|
+
@blog.entries.create!(name: 'Inactive Entry', author: 'BC', tag_list: 'baz', active: false)
|
54
|
+
|
55
|
+
assert_equal(['Active Entry'], view_model.entries.map(&:name))
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_entries_sort_by_written_date
|
59
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog)
|
60
|
+
|
61
|
+
@blog.entries.create!(name: '3', author: 'BC', tag_list: 'baz', written_at: Time.now - 3.days)
|
62
|
+
@blog.entries.create!(name: '4', author: 'BC', tag_list: 'qux', written_at: Time.now - 4.days)
|
63
|
+
@blog.entries.create!(name: '1', author: 'BC', tag_list: 'foo', written_at: Time.now - 1.day)
|
64
|
+
@blog.entries.create!(name: '2', author: 'BC', tag_list: 'bar', written_at: Time.now - 2.days)
|
65
|
+
|
66
|
+
assert_equal(%w[1 2 3 4], view_model.entries.map(&:name))
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_entries_on_index_returns_the_first_4_entries_in_a_blog
|
70
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog)
|
71
|
+
@blog.entries.create!(name: '1', author: 'BC', tag_list: 'foo', written_at: Time.now - 1.day)
|
72
|
+
@blog.entries.create!(name: '2', author: 'BC', tag_list: 'bar', written_at: Time.now - 2.days)
|
73
|
+
@blog.entries.create!(name: '3', author: 'BC', tag_list: 'baz', written_at: Time.now - 3.days)
|
74
|
+
@blog.entries.create!(name: '4', author: 'BC', tag_list: 'qux', written_at: Time.now - 4.days)
|
75
|
+
@blog.entries.create!(name: '5', author: 'BC', tag_list: 'qux', written_at: Time.now - 5.days)
|
76
|
+
@blog.entries.create!(name: '6', author: 'BC', tag_list: 'qux', written_at: Time.now - 6.days, featured: true)
|
77
|
+
|
78
|
+
assert_equal(4, view_model.entries_on_index.count)
|
79
|
+
assert_equal(%w[6 1 2 3], view_model.entries_on_index.map(&:name))
|
80
|
+
assert_instance_of(Workarea::Storefront::BlogEntryViewModel, view_model.entries_on_index.first)
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_tags_includes_all_tags_for_active_entries_in_a_blog_as_facets
|
84
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog)
|
85
|
+
@blog.entries.create!(
|
86
|
+
name: 'Test', author: 'BC', tag_list: 'foo', active: true
|
87
|
+
)
|
88
|
+
@blog.entries.create!(
|
89
|
+
name: 'Test', author: 'BC', tag_list: 'bar', active: true
|
90
|
+
)
|
91
|
+
@blog.entries.create!(
|
92
|
+
name: 'Test', author: 'BC', tag_list: 'baz', active: false
|
93
|
+
)
|
94
|
+
|
95
|
+
view_model.options[:tag] = 'foo'
|
96
|
+
assert_equal(2, view_model.tags.count)
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_tags_empty_without_blog_entries_collection
|
100
|
+
Workarea::Content::BlogEntry.collection.drop
|
101
|
+
|
102
|
+
model = Workarea::Content::Blog.first
|
103
|
+
view_model = Workarea::Storefront::BlogViewModel.new(model)
|
104
|
+
|
105
|
+
assert_empty(view_model.tags)
|
106
|
+
ensure
|
107
|
+
Workarea::Content::BlogEntry.create_indexes
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_updated_at_is_the_updated_at_date_of_the_newest_active_entry
|
111
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog)
|
112
|
+
3.times do
|
113
|
+
@blog.entries.create!(name: 'Test', author: 'BC', active: true)
|
114
|
+
end
|
115
|
+
|
116
|
+
assert_equal(@blog.entries.first.updated_at.to_s, view_model.updated_at.to_s)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_filters_entries_by_current_release
|
120
|
+
release = create_release(publish_at: 1.hour.from_now, published_at: nil)
|
121
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog)
|
122
|
+
3.times do
|
123
|
+
@blog.entries.create!(name: 'Test', author: 'BC', active: true)
|
124
|
+
end
|
125
|
+
2.times do
|
126
|
+
@blog.entries.create!(name: 'Unpublished', author: 'BC', active: false)
|
127
|
+
end
|
128
|
+
release.as_current do
|
129
|
+
entry = @blog.entries.where(name: 'Unpublished').first
|
130
|
+
entry.active = true
|
131
|
+
entry.save!
|
132
|
+
end
|
133
|
+
unpublished = view_model.entries.select { |entry| entry.name == 'Unpublished' }
|
134
|
+
|
135
|
+
assert_equal(3, view_model.entries.count)
|
136
|
+
assert unpublished.empty?
|
137
|
+
|
138
|
+
release.as_current do
|
139
|
+
view_model = Workarea::Storefront::BlogViewModel.new(@blog.reload)
|
140
|
+
newly_published = view_model.entries.select { |entry| entry.name == 'Unpublished' }
|
141
|
+
|
142
|
+
assert_equal(4, view_model.entries.count)
|
143
|
+
refute newly_published.empty?
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
class GenerateContentBlogMetadataTest < TestCase
|
5
|
+
def test_generate_metadata_for_blog
|
6
|
+
blog = create_blog(name: 'foo')
|
7
|
+
content = Content.for(blog)
|
8
|
+
|
9
|
+
content.update!(automate_metadata: true)
|
10
|
+
content.blocks.create!(type: 'html', data: { html: '<p>Lorem ipsum dolor</p>' })
|
11
|
+
|
12
|
+
GenerateContentMetadata.new.perform
|
13
|
+
|
14
|
+
assert_equal('foo', content.reload.browser_title)
|
15
|
+
assert_equal('Lorem ipsum dolor', content.reload.meta_description)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'workarea/blog/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'workarea-blog'
|
7
|
+
s.version = Workarea::Blog::VERSION
|
8
|
+
s.authors = ['bcrouse']
|
9
|
+
s.email = ['bcrouse@workarea.com']
|
10
|
+
s.homepage = 'https://github.com/workarea-commerce/workarea-blog'
|
11
|
+
s.summary = 'Blog plugin for Workarea.'
|
12
|
+
s.description = 'This plugin adds blogs capability to Workarea.'
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
|
16
|
+
s.license = 'Business Software License'
|
17
|
+
|
18
|
+
s.add_dependency 'workarea', '~> 3.x', '>= 3.3.x'
|
19
|
+
end
|