99 lines
4.2 KiB
Elixir
99 lines
4.2 KiB
Elixir
defmodule BDS.CSM032MapGetPatternMatchTest do
|
|
use ExUnit.Case, async: true
|
|
|
|
@metadata_consumers [
|
|
"lib/bds/posts/translation_validation.ex",
|
|
"lib/bds/posts/auto_translation.ex",
|
|
"lib/bds/desktop/shell_commands.ex",
|
|
"lib/bds/desktop/shell_live/settings_editor/project_settings.ex",
|
|
"lib/bds/desktop/shell_live/settings_editor/style_editor.ex",
|
|
"lib/bds/desktop/shell_live/settings_editor/managed_categories.ex",
|
|
"lib/bds/desktop/shell_live/settings_editor/publishing_settings.ex",
|
|
"lib/bds/desktop/shell_live/import_editor/taxonomy_editing.ex",
|
|
"lib/bds/desktop/shell_live/import_editor/analysis_state.ex",
|
|
"lib/bds/import_execution.ex"
|
|
]
|
|
|
|
@metadata_atom_keys ~w(main_language blog_languages categories category_settings
|
|
publishing_preferences name description public_url default_author
|
|
max_posts_per_page blogmark_category pico_theme
|
|
semantic_similarity_enabled)
|
|
|
|
describe "source-level: no Map.get(metadata, :atom_key) on metadata struct" do
|
|
for file <- @metadata_consumers do
|
|
test "#{Path.basename(file)} uses dot access instead of Map.get for metadata atom keys" do
|
|
source = File.read!(unquote(file))
|
|
|
|
for key <- @metadata_atom_keys do
|
|
refute source =~ "Map.get(metadata, :#{key}",
|
|
"#{unquote(file)} should use metadata.#{key} instead of Map.get(metadata, :#{key})"
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
describe "source-level: overlay.ex uses pattern matching for known structures" do
|
|
test "delete_details uses pattern matching instead of Map.get" do
|
|
source = File.read!("lib/bds/desktop/overlay.ex")
|
|
refute source =~ "Map.get(delete_details,",
|
|
"overlay.ex should pattern match delete_details instead of using Map.get"
|
|
end
|
|
|
|
test "merge_details uses pattern matching instead of Map.get" do
|
|
source = File.read!("lib/bds/desktop/overlay.ex")
|
|
refute source =~ "Map.get(merge,",
|
|
"overlay.ex should pattern match merge_details instead of using Map.get"
|
|
end
|
|
|
|
test "media struct fields use dot access in to_insert_media_result" do
|
|
source = File.read!("lib/bds/desktop/overlay.ex")
|
|
|
|
refute source =~ ~r/to_insert_media_result.*Map\.get\(media/s &&
|
|
source =~ "defp to_insert_media_result",
|
|
"to_insert_media_result should use dot access for media fields"
|
|
end
|
|
|
|
test "media struct fields use dot access in to_gallery_image" do
|
|
source = File.read!("lib/bds/desktop/overlay.ex")
|
|
|
|
refute source =~ ~r/to_gallery_image.*Map\.get\(media/s &&
|
|
source =~ "defp to_gallery_image",
|
|
"to_gallery_image should use dot access for media fields"
|
|
end
|
|
end
|
|
|
|
describe "source-level: generation pipeline uses dot access for Post struct fields" do
|
|
test "outputs.ex uses post.language instead of Map.get(post, :language)" do
|
|
source = File.read!("lib/bds/generation/outputs.ex")
|
|
refute source =~ "Map.get(post, :language)",
|
|
"outputs.ex should use post.language"
|
|
end
|
|
|
|
test "data.ex uses dot access for Post struct fields in build_published_translation_variant" do
|
|
source = File.read!("lib/bds/generation/data.ex")
|
|
refute source =~ "Map.get(post, :author)",
|
|
"data.ex should use post.author"
|
|
refute source =~ "Map.get(post, :tags",
|
|
"data.ex should use post.tags"
|
|
refute source =~ "Map.get(post, :categories",
|
|
"data.ex should use post.categories"
|
|
refute source =~ "Map.get(post, :template_slug)",
|
|
"data.ex should use post.template_slug"
|
|
refute source =~ "Map.get(post, :do_not_translate",
|
|
"data.ex should use post.do_not_translate"
|
|
end
|
|
|
|
test "validation.ex uses post.file_path instead of Map.get(post, :file_path)" do
|
|
source = File.read!("lib/bds/generation/validation.ex")
|
|
refute source =~ "Map.get(post, :file_path)",
|
|
"validation.ex should use post.file_path"
|
|
end
|
|
|
|
test "sitemap.ex uses post.do_not_translate instead of Map.get" do
|
|
source = File.read!("lib/bds/generation/sitemap.ex")
|
|
refute source =~ "Map.get(post, :do_not_translate)",
|
|
"sitemap.ex should use post.do_not_translate"
|
|
end
|
|
end
|
|
end
|