diff --git a/lib/decentralised_book_index/sync/data_transformers/author_transformer.ex b/lib/decentralised_book_index/sync/data_transformers/author_transformer.ex index 1e74db8..10acf19 100644 --- a/lib/decentralised_book_index/sync/data_transformers/author_transformer.ex +++ b/lib/decentralised_book_index/sync/data_transformers/author_transformer.ex @@ -20,6 +20,10 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.AuthorTransformer do dbi_server_id: get_in(json_body, ["attributes", "dbi_server_id"]) } - {:ok, attrs} + if is_nil(attrs[:dbi_server_id]) do + {:ok, attrs |> Map.delete(:dbi_server_id)} + else + {:ok, attrs} + end end end diff --git a/lib/decentralised_book_index/sync/data_transformers/book_transformer.ex b/lib/decentralised_book_index/sync/data_transformers/book_transformer.ex index 5be494a..f91f54d 100644 --- a/lib/decentralised_book_index/sync/data_transformers/book_transformer.ex +++ b/lib/decentralised_book_index/sync/data_transformers/book_transformer.ex @@ -26,6 +26,10 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.BookTransformer do dbi_server_id: get_in(json_body, ["attributes", "dbi_server_id"]) } - {:ok, attrs} + if is_nil(attrs[:dbi_server_id]) do + {:ok, attrs |> Map.delete(:dbi_server_id)} + else + {:ok, attrs} + end end end diff --git a/lib/decentralised_book_index/sync/data_transformers/dbi_server_transformer.ex b/lib/decentralised_book_index/sync/data_transformers/dbi_server_transformer.ex index 1e0728a..ab34ea1 100644 --- a/lib/decentralised_book_index/sync/data_transformers/dbi_server_transformer.ex +++ b/lib/decentralised_book_index/sync/data_transformers/dbi_server_transformer.ex @@ -18,6 +18,10 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.DBIServerTransformer do dbi_server_id: get_in(json_body, ["attributes", "dbi_server_id"]) } - {:ok, attrs} + if is_nil(attrs[:dbi_server_id]) do + {:ok, attrs |> Map.delete(:dbi_server_id)} + else + {:ok, attrs} + end end end diff --git a/lib/decentralised_book_index/sync/data_transformers/publisher_transformer.ex b/lib/decentralised_book_index/sync/data_transformers/publisher_transformer.ex index b824873..4c44b9e 100644 --- a/lib/decentralised_book_index/sync/data_transformers/publisher_transformer.ex +++ b/lib/decentralised_book_index/sync/data_transformers/publisher_transformer.ex @@ -17,6 +17,10 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.PublisherTransformer do dbi_server_id: get_in(json_body, ["attributes", "dbi_server_id"]) } - {:ok, attrs} + if is_nil(attrs[:dbi_server_id]) do + {:ok, attrs |> Map.delete(:dbi_server_id)} + else + {:ok, attrs} + end end end diff --git a/test/decentralised_book_index/sync/data_transformers/author_transformer_test.exs b/test/decentralised_book_index/sync/data_transformers/author_transformer_test.exs index ba37d89..013f8e4 100644 --- a/test/decentralised_book_index/sync/data_transformers/author_transformer_test.exs +++ b/test/decentralised_book_index/sync/data_transformers/author_transformer_test.exs @@ -81,5 +81,40 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.AuthorTransformerTest do updated_at: "2025-03-26T10:16:16.124581Z" } = author end + + test "a json has dbi_server_id as nil, then author's map has not :dbi_server_id key" do + json_body = %{ + "attributes" => %{ + "author_alias_registry_id" => "1320a6fe-b311-45ac-bbaa-39cf29c44624", + "avatar_url" => "/images/avatar.png", + "dbi_server_id" => nil, + "description" => "Something", + "inserted_at" => "2025-03-25T19:19:15.187456Z", + "name" => "Author", + "updated_at" => "2025-03-26T10:16:16.124581Z" + }, + "id" => "889a323e-d104-4b5d-b276-dad5a9b1da9d", + "links" => %{}, + "meta" => %{}, + "relationships" => %{ + "author_alias_registry" => %{"links" => %{}, "meta" => %{}}, + "dbi_server" => %{"links" => %{}, "meta" => %{}} + }, + "type" => "author" + } + + assert {:ok, author} = AuthorTransformer.from_json(json_body) + + assert %{ + id: "889a323e-d104-4b5d-b276-dad5a9b1da9d", + name: "Author", + description: "Something", + avatar_url: "/images/avatar.png", + author_alias_registry_id: "1320a6fe-b311-45ac-bbaa-39cf29c44624", + inserted_at: "2025-03-25T19:19:15.187456Z", + updated_at: "2025-03-26T10:16:16.124581Z" + } = author + refute Map.has_key?(author, :dbi_server_id) + end end end diff --git a/test/decentralised_book_index/sync/data_transformers/book_transformer_test.exs b/test/decentralised_book_index/sync/data_transformers/book_transformer_test.exs index 99c4999..91cdec5 100644 --- a/test/decentralised_book_index/sync/data_transformers/book_transformer_test.exs +++ b/test/decentralised_book_index/sync/data_transformers/book_transformer_test.exs @@ -138,5 +138,70 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.BookTransformerTest do dbi_server_id: "889a323e-d104-4b5d-b276-dad5a9b1da99" } = book end + + test "a json has dbi_server_id as nil, then book's map has not :dbi_server_id key" do + json_body = %{ + "attributes" => %{ + "dbi_server_id" => nil, + "cover_image_url" => "/images/book_cover.png", + "description" => "A cool book.", + "format" => "Paper", + "inserted_at" => "2025-03-20T14:44:36.162986Z", + "language" => "English", + "page_count" => 1000, + "published" => "2025-03-05", + "publisher_id" => "11349865-1b7b-454a-b999-6c4059888a78", + "title" => "Book", + "updated_at" => "2025-04-01T18:14:25.754055Z" + }, + "id" => "1bbe8861-9d9d-4684-bda6-b6ec238d8d08", + "links" => %{}, + "meta" => %{}, + "relationships" => %{ + "author_roles" => %{ + "links" => %{ + "related" => + "http://localhost:4000/api/v1/json/books/1bbe8861-9d9d-4684-bda6-b6ec238d8d08/author_roles" + }, + "meta" => %{} + }, + "bids" => %{ + "links" => %{ + "related" => + "http://localhost:4000/api/v1/json/books/1bbe8861-9d9d-4684-bda6-b6ec238d8d08/bids" + }, + "meta" => %{} + }, + "book_editions_registry" => %{"links" => %{}, "meta" => %{}}, + "dbi_server" => %{"links" => %{}, "meta" => %{}}, + "publisher" => %{ + "links" => %{ + "related" => + "http://localhost:4000/api/v1/json/books/1bbe8861-9d9d-4684-bda6-b6ec238d8d08/publisher" + }, + "meta" => %{} + } + }, + "type" => "book" + } + + assert {:ok, book} = BookTransformer.from_json(json_body) + + assert %{ + id: "1bbe8861-9d9d-4684-bda6-b6ec238d8d08", + cover_image_url: "/images/book_cover.png", + description: "A cool book.", + format: "Paper", + inserted_at: "2025-03-20T14:44:36.162986Z", + language: "English", + page_count: 1000, + published: "2025-03-05", + publisher_id: "11349865-1b7b-454a-b999-6c4059888a78", + title: "Book", + updated_at: "2025-04-01T18:14:25.754055Z", + } = book + + refute Map.has_key?(book, :dbi_server_id) + end end end diff --git a/test/decentralised_book_index/sync/data_transformers/dbi_server_transformer_test.exs b/test/decentralised_book_index/sync/data_transformers/dbi_server_transformer_test.exs index 7c39226..88c4eb5 100644 --- a/test/decentralised_book_index/sync/data_transformers/dbi_server_transformer_test.exs +++ b/test/decentralised_book_index/sync/data_transformers/dbi_server_transformer_test.exs @@ -41,6 +41,34 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.DBIServerTransformerTest end test "a json doesn't contains server information \"data\" attribute" do + json_body = %{ + "attributes" => %{ + "dbi_server_id" => "0c0647ec-07ef-4caa-b683-5847dbfbe5cc", + "inserted_at" => "2025-03-22T20:07:30.766249Z", + "name" => "Test", + "updated_at" => "2025-05-04T18:48:44.213309Z", + "url" => "http://localhost:4001" + }, + "id" => "0c0647ec-07ef-4caa-b683-5847dbfbe5cc", + "links" => %{}, + "meta" => %{}, + "relationships" => %{"dbi_server" => %{"links" => %{}, "meta" => %{}}}, + "type" => "dbi_server" + } + + assert {:ok, server} = DBIServerTransformer.from_json(json_body) + + assert %{ + id: "0c0647ec-07ef-4caa-b683-5847dbfbe5cc", + name: "Test", + url: "http://localhost:4001", + inserted_at: "2025-03-22T20:07:30.766249Z", + updated_at: "2025-05-04T18:48:44.213309Z", + dbi_server_id: "0c0647ec-07ef-4caa-b683-5847dbfbe5cc" + } = server + end + + test "a json has dbi_server_id as nil, then server's map has not :dbi_server_id key" do json_body = %{ "attributes" => %{ "inserted_at" => "2025-03-22T20:07:30.766249Z", @@ -64,6 +92,8 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.DBIServerTransformerTest inserted_at: "2025-03-22T20:07:30.766249Z", updated_at: "2025-05-04T18:48:44.213309Z" } = server + + refute Map.has_key?(server, :dbi_server_id) end end end diff --git a/test/decentralised_book_index/sync/data_transformers/publisher_transformer_test.exs b/test/decentralised_book_index/sync/data_transformers/publisher_transformer_test.exs index 752c1d3..adbbbc4 100644 --- a/test/decentralised_book_index/sync/data_transformers/publisher_transformer_test.exs +++ b/test/decentralised_book_index/sync/data_transformers/publisher_transformer_test.exs @@ -63,5 +63,32 @@ defmodule DecentralisedBookIndex.Sync.DataTransformers.PublisherTransformerTest dbi_server_id: "889a323e-d104-4b5d-b276-dad5a9b1da99" } = publisher end + + test "a json has dbi_server_id as nil, then publisher's map has not :dbi_server_id key" do + json_body = %{ + "attributes" => %{ + "dbi_server_id" => nil, + "inserted_at" => "2025-03-21T09:20:48.791539Z", + "name" => "Publisher", + "updated_at" => "2025-03-21T09:20:48.791539Z" + }, + "id" => "11349865-1b7b-454a-b999-6c4059888a78", + "links" => %{}, + "meta" => %{}, + "relationships" => %{"dbi_server" => %{"links" => %{}, "meta" => %{}}}, + "type" => "publisher" + } + + assert {:ok, publisher} = PublisherTransformer.from_json(json_body) + + assert %{ + id: "11349865-1b7b-454a-b999-6c4059888a78", + name: "Publisher", + inserted_at: "2025-03-21T09:20:48.791539Z", + updated_at: "2025-03-21T09:20:48.791539Z", + } = publisher + + refute Map.has_key?(publisher, :dbi_server_id) + end end end