From 77db6dd782233ff0af0838c9468cc7aa2df1cf00 Mon Sep 17 00:00:00 2001 From: Thomas von Deyen Date: Wed, 30 Jun 2021 17:27:16 +0200 Subject: [PATCH 1/4] Update essence picture serializer spec --- .../essence_picture_serializer_spec.rb | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/spec/serializers/alchemy/json_api/essence_picture_serializer_spec.rb b/spec/serializers/alchemy/json_api/essence_picture_serializer_spec.rb index e19169b..4d8586c 100644 --- a/spec/serializers/alchemy/json_api/essence_picture_serializer_spec.rb +++ b/spec/serializers/alchemy/json_api/essence_picture_serializer_spec.rb @@ -4,12 +4,14 @@ RSpec.describe Alchemy::JsonApi::EssencePictureSerializer do let(:element) { FactoryBot.create(:alchemy_element) } let(:content) { FactoryBot.create(:alchemy_content, element: element) } + let(:picture) { FactoryBot.create(:alchemy_picture, image_file_size: 301) } let(:essence) do FactoryBot.create( :alchemy_essence_picture, title: "Picture", content: content, link: "/hello", + picture: picture ) end let(:options) { {} } @@ -27,7 +29,7 @@ expect(subject[:image_name]).to eq("image") expect(subject[:image_file_name]).to eq("image.png") expect(subject[:image_mime_type]).to eq("image/png") - expect(subject[:image_file_size]).to eq(70) + expect(subject[:image_file_size]).to eq(301) expect(subject[:image_dimensions]).to eq(width: 1, height: 1) end @@ -35,15 +37,7 @@ let(:image_dimensions) { subject[:image_dimensions] } context "without image" do - let(:essence) do - FactoryBot.create( - :alchemy_essence_picture, - title: "Picture", - content: content, - link: "/hello", - picture: nil, - ) - end + let(:picture) { nil } it { expect(image_dimensions).to be_nil } end @@ -91,15 +85,7 @@ end context "With no picture set" do - let(:essence) do - FactoryBot.create( - :alchemy_essence_picture, - content: content, - picture: nil, - ) - end - - it_behaves_like "an essence serializer" + let(:picture) { nil } describe "attributes" do subject { serializer.serializable_hash[:data][:attributes] } From 076781bbb58b0dc3ce4c2c4d62319c005f491a48 Mon Sep 17 00:00:00 2001 From: Thomas von Deyen Date: Thu, 1 Jul 2021 17:49:52 +0200 Subject: [PATCH 2/4] Add essence headline serializer --- .../json_api/essence_headline_serializer.rb | 13 ++++++++ .../essence_headline_serializer_spec.rb | 32 +++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 app/serializers/alchemy/json_api/essence_headline_serializer.rb create mode 100644 spec/serializers/alchemy/json_api/essence_headline_serializer_spec.rb diff --git a/app/serializers/alchemy/json_api/essence_headline_serializer.rb b/app/serializers/alchemy/json_api/essence_headline_serializer.rb new file mode 100644 index 0000000..57ee26c --- /dev/null +++ b/app/serializers/alchemy/json_api/essence_headline_serializer.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require "alchemy/json_api/essence_serializer" + +module Alchemy + module JsonApi + class EssenceHeadlineSerializer + include EssenceSerializer + + attributes :level, :size + end + end +end diff --git a/spec/serializers/alchemy/json_api/essence_headline_serializer_spec.rb b/spec/serializers/alchemy/json_api/essence_headline_serializer_spec.rb new file mode 100644 index 0000000..fa7171e --- /dev/null +++ b/spec/serializers/alchemy/json_api/essence_headline_serializer_spec.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +require "rails_helper" + +RSpec.describe Alchemy::JsonApi::EssenceHeadlineSerializer do + let(:element) { FactoryBot.create(:alchemy_element) } + let(:content) { FactoryBot.create(:alchemy_content, element: element) } + let(:essence) do + Alchemy::EssenceHeadline.create( + content: content, + body: "Hello you world", + size: 2, + level: 3, + ) + end + + let(:serializer) { described_class.new(essence) } + + it_behaves_like "an essence serializer" + + subject { serializer.serializable_hash[:data][:attributes] } + + it do + is_expected.to match( + hash_including( + ingredient: "Hello you world", + level: 3, + size: 2, + ) + ) + end +end From 4e2b8d0a03d62a927f9290570198e3cb3011fab4 Mon Sep 17 00:00:00 2001 From: Thomas von Deyen Date: Mon, 5 Jul 2021 14:19:49 +0200 Subject: [PATCH 3/4] Add EssenceVideo Serializer --- .../json_api/essence_video_serializer.rb | 42 ++++++++++++++ .../json_api/essence_video_serializer_spec.rb | 57 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 app/serializers/alchemy/json_api/essence_video_serializer.rb create mode 100644 spec/serializers/alchemy/json_api/essence_video_serializer_spec.rb diff --git a/app/serializers/alchemy/json_api/essence_video_serializer.rb b/app/serializers/alchemy/json_api/essence_video_serializer.rb new file mode 100644 index 0000000..fa16747 --- /dev/null +++ b/app/serializers/alchemy/json_api/essence_video_serializer.rb @@ -0,0 +1,42 @@ +# frozen_string_literal: true + +require "alchemy/json_api/essence_serializer" + +module Alchemy + module JsonApi + class EssenceVideoSerializer + include EssenceSerializer + + attributes( + :width, + :height, + :allow_fullscreen, + :autoplay, + :controls, + :preload, + ) + + attribute :ingredient do |essence| + essence.attachment&.url + end + + with_options if: ->(essence) { essence.attachment } do + attribute :video_name do |essence| + essence.attachment.name + end + + attribute :video_file_name do |essence| + essence.attachment.file_name + end + + attribute :video_mime_type do |essence| + essence.attachment.file_mime_type + end + + attribute :video_file_size do |essence| + essence.attachment.file_size + end + end + end + end +end diff --git a/spec/serializers/alchemy/json_api/essence_video_serializer_spec.rb b/spec/serializers/alchemy/json_api/essence_video_serializer_spec.rb new file mode 100644 index 0000000..1a6f35e --- /dev/null +++ b/spec/serializers/alchemy/json_api/essence_video_serializer_spec.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +require "rails_helper" + +RSpec.describe Alchemy::JsonApi::EssenceVideoSerializer do + let(:element) { FactoryBot.create(:alchemy_element) } + let(:content) { FactoryBot.create(:alchemy_content, element: element) } + let(:attachment) { FactoryBot.create(:alchemy_attachment) } + let(:essence) do + Alchemy::EssenceVideo.create( + content: content, + attachment: attachment, + ) + end + let(:options) { {} } + + subject(:serializer) { described_class.new(essence, options) } + + it_behaves_like "an essence serializer" + + describe "attributes" do + subject { serializer.serializable_hash[:data][:attributes] } + + it "has the right keys and values", :aggregate_failures do + expect(subject[:width]).to eq(nil) + expect(subject[:height]).to eq(nil) + expect(subject[:allow_fullscreen]).to eq(true) + expect(subject[:autoplay]).to eq(false) + expect(subject[:controls]).to eq(true) + expect(subject[:preload]).to eq(nil) + expect(subject[:ingredient]).to match(/\/attachment\/#{attachment.id}\/show/o) + expect(subject[:video_name]).to eq("image") + expect(subject[:video_file_name]).to eq("image.png") + expect(subject[:video_mime_type]).to eq("image/png") + expect(subject[:video_file_size]).to eq(70) + end + end + + context "With no video set" do + let(:essence) do + Alchemy::EssenceVideo.create( + content: content, + attachment: nil, + ) + end + + it_behaves_like "an essence serializer" + + describe "attributes" do + subject { serializer.serializable_hash[:data][:attributes] } + + it "has the right keys and values" do + expect(subject[:ingredient]).to be nil + end + end + end +end From 4f2c59ea783f1199cdec7b56bfe8ac46cd748af5 Mon Sep 17 00:00:00 2001 From: Thomas von Deyen Date: Mon, 5 Jul 2021 15:01:49 +0200 Subject: [PATCH 4/4] Add essence audio serializer --- .../json_api/essence_audio_serializer.rb | 40 ++++++++++++++ .../json_api/essence_audio_serializer_spec.rb | 55 +++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 app/serializers/alchemy/json_api/essence_audio_serializer.rb create mode 100644 spec/serializers/alchemy/json_api/essence_audio_serializer_spec.rb diff --git a/app/serializers/alchemy/json_api/essence_audio_serializer.rb b/app/serializers/alchemy/json_api/essence_audio_serializer.rb new file mode 100644 index 0000000..3567aaf --- /dev/null +++ b/app/serializers/alchemy/json_api/essence_audio_serializer.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +require "alchemy/json_api/essence_serializer" + +module Alchemy + module JsonApi + class EssenceAudioSerializer + include EssenceSerializer + + attributes( + :autoplay, + :controls, + :muted, + :loop, + ) + + attribute :ingredient do |essence| + essence.attachment&.url + end + + with_options if: ->(essence) { essence.attachment } do + attribute :audio_name do |essence| + essence.attachment.name + end + + attribute :audio_file_name do |essence| + essence.attachment.file_name + end + + attribute :audio_mime_type do |essence| + essence.attachment.file_mime_type + end + + attribute :audio_file_size do |essence| + essence.attachment.file_size + end + end + end + end +end diff --git a/spec/serializers/alchemy/json_api/essence_audio_serializer_spec.rb b/spec/serializers/alchemy/json_api/essence_audio_serializer_spec.rb new file mode 100644 index 0000000..413e1fb --- /dev/null +++ b/spec/serializers/alchemy/json_api/essence_audio_serializer_spec.rb @@ -0,0 +1,55 @@ +# frozen_string_literal: true + +require "rails_helper" + +RSpec.describe Alchemy::JsonApi::EssenceAudioSerializer do + let(:element) { FactoryBot.create(:alchemy_element) } + let(:content) { FactoryBot.create(:alchemy_content, element: element) } + let(:attachment) { FactoryBot.create(:alchemy_attachment) } + let(:essence) do + Alchemy::EssenceAudio.create( + content: content, + attachment: attachment, + ) + end + let(:options) { {} } + + subject(:serializer) { described_class.new(essence, options) } + + it_behaves_like "an essence serializer" + + describe "attributes" do + subject { serializer.serializable_hash[:data][:attributes] } + + it "has the right keys and values", :aggregate_failures do + expect(subject[:autoplay]).to eq(false) + expect(subject[:controls]).to eq(true) + expect(subject[:muted]).to eq(false) + expect(subject[:loop]).to eq(false) + expect(subject[:ingredient]).to match(/\/attachment\/#{attachment.id}\/show/o) + expect(subject[:audio_name]).to eq("image") + expect(subject[:audio_file_name]).to eq("image.png") + expect(subject[:audio_mime_type]).to eq("image/png") + expect(subject[:audio_file_size]).to eq(70) + end + end + + context "With no video set" do + let(:essence) do + Alchemy::EssenceAudio.create( + content: content, + attachment: nil, + ) + end + + it_behaves_like "an essence serializer" + + describe "attributes" do + subject { serializer.serializable_hash[:data][:attributes] } + + it "has the right keys and values" do + expect(subject[:ingredient]).to be nil + end + end + end +end