Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Present editionable topical events #9716

Draft
wants to merge 1 commit into
base: create-editionable-topical-events
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions app/models/editionable_topical_event.rb
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,14 @@ def display_type_key
"editionable_topical_event"
end

def publishing_api_presenter
PublishingApi::EditionableTopicalEventPresenter
end

def base_path
"/government/editionable-topical-events/#{slug}"
end

def self.format_name
"topical event"
end
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
module PublishingApi
class EditionableTopicalEventPresenter
include Rails.application.routes.url_helpers
include ActionView::Helpers::UrlHelper

attr_accessor :item, :update_type, :state

def initialize(item, update_type: nil, state: "published")
self.item = item
self.update_type = update_type || "major"
self.state = state
end

delegate :content_id, to: :item

def content
content = BaseItemPresenter.new(
item,
update_type:,
).base_attributes

content.merge!(
details:,
document_type: item.class.name.underscore,
public_updated_at: item.updated_at,
rendering_app: Whitehall::RenderingApp::COLLECTIONS_FRONTEND,
schema_name: "topical_event",
)
content.merge!(PayloadBuilder::PolymorphicPath.for(item))
end

def links
{}
end

def details
{}
end
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
require "test_helper"

class PublishingApi::EditionableTopicalEventPresenterTest < ActiveSupport::TestCase
def present(...)
PublishingApi::EditionableTopicalEventPresenter.new(...)
end

test "presents a Topical Event ready for adding to the publishing API" do
topical_event = create(:editionable_topical_event)

public_path = topical_event.public_path

expected_hash = {
base_path: public_path,
title: topical_event.title,
schema_name: "topical_event",
document_type: "editionable_topical_event",
locale: "en",
publishing_app: Whitehall::PublishingApp::WHITEHALL,
rendering_app: Whitehall::RenderingApp::COLLECTIONS_FRONTEND,
public_updated_at: topical_event.updated_at,
routes: [{ path: public_path, type: "exact" }],
redirects: [],
details: {},
update_type: "major",
}

expected_links = {}

presented_item = present(topical_event)

assert_equal expected_hash, presented_item.content
assert_equal "major", presented_item.update_type
assert_equal topical_event.content_id, presented_item.content_id

# TODO: uncomment the below assertion when the editionable_topical_event model is
# finished and all content can be added to this presenter.
# assert_valid_against_publisher_schema(presented_item.content, "topical_event")

assert_equal expected_links, presented_item.links
assert_valid_against_links_schema({ links: presented_item.links }, "topical_event")
end
end
Loading