From 5532b5358f3ff3b6a7892ead25aa3f753864d452 Mon Sep 17 00:00:00 2001 From: Beth Skurrie Date: Fri, 14 May 2021 17:02:24 +1000 Subject: [PATCH] chore: add decorator for released versions --- .../decorators/released_versions_decorator.rb | 20 ++++++++++++++ ...ed_versions_for_version_and_environment.rb | 27 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 lib/pact_broker/api/decorators/released_versions_decorator.rb create mode 100644 spec/features/get_released_versions_for_version_and_environment.rb diff --git a/lib/pact_broker/api/decorators/released_versions_decorator.rb b/lib/pact_broker/api/decorators/released_versions_decorator.rb new file mode 100644 index 000000000..c74e337db --- /dev/null +++ b/lib/pact_broker/api/decorators/released_versions_decorator.rb @@ -0,0 +1,20 @@ +require 'pact_broker/api/decorators/base_decorator' +require 'pact_broker/api/decorators/released_version_decorator' + +module PactBroker + module Api + module Decorators + class ReleasedVersionsDecorator < BaseDecorator + collection :entries, as: :releasedVersions, embedded: true, :extend => PactBroker::Api::Decorators::ReleasedVersionDecorator + + link :self do | context | + href = append_query_if_present(context[:resource_url], context[:query_string]) + { + href: href, + title: context.fetch(:title) + } + end + end + end + end +end diff --git a/spec/features/get_released_versions_for_version_and_environment.rb b/spec/features/get_released_versions_for_version_and_environment.rb new file mode 100644 index 000000000..4c691a346 --- /dev/null +++ b/spec/features/get_released_versions_for_version_and_environment.rb @@ -0,0 +1,27 @@ +RSpec.describe "Get released versions for version and environment" do + let!(:version) { td.create_consumer("Foo").create_consumer_version("1").and_return(:consumer_version) } + let!(:test_environment) { td.create_environment("test").and_return(:environment) } + let!(:prod_environment) { td.create_environment("prod").and_return(:environment) } + let!(:deployed_version) do + td.create_released_version_for_consumer_version(environment_name: "test", created_at: DateTime.now - 2) + .create_deployed_version_for_consumer_version(environment_name: "prod", created_at: DateTime.now - 1) + end + + let(:path) do + PactBroker::Api::PactBrokerUrls.released_versions_for_version_and_environment_url( + version, + test_environment + ) + end + + let(:response_body_hash) { JSON.parse(subject.body, symbolize_names: true) } + + subject { get(path, nil, { "HTTP_ACCEPT" => "application/hal+json" }) } + + it "returns a list of released versions" do + expect(response_body_hash[:_embedded][:releasedVersions]).to be_a(Array) + expect(response_body_hash[:_embedded][:releasedVersions].size).to eq 1 + expect(response_body_hash[:_links][:self][:title]).to eq "Released versions for Foo version 1 in Test" + expect(response_body_hash[:_links][:self][:href]).to end_with(path) + end +end