72 lines
2.2 KiB
Ruby
72 lines
2.2 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'spec_helper'
|
||
|
|
||
|
RSpec.describe Import::GithubFailureSerializer, feature_category: :importers do
|
||
|
subject(:serializer) { described_class.new }
|
||
|
|
||
|
it 'represents GithubFailureEntity entities' do
|
||
|
expect(described_class.entity_class).to eq(Import::GithubFailureEntity)
|
||
|
end
|
||
|
|
||
|
describe '#represent' do
|
||
|
let(:timestamp) { Time.new(2023, 1, 1).utc }
|
||
|
let(:github_identifiers) { { 'iid' => 2, 'object_type' => 'pull_request', 'title' => 'Implement cool feature' } }
|
||
|
let(:project) do
|
||
|
instance_double(
|
||
|
Project,
|
||
|
id: 123456,
|
||
|
import_status: 'finished',
|
||
|
import_url: 'https://github.com/example/repo.git',
|
||
|
import_source: 'example/repo'
|
||
|
)
|
||
|
end
|
||
|
|
||
|
let(:import_failure) do
|
||
|
instance_double(
|
||
|
ImportFailure,
|
||
|
project: project,
|
||
|
exception_class: 'Some class',
|
||
|
exception_message: 'Something went wrong',
|
||
|
source: 'Gitlab::GithubImport::Importer::PullRequestImporter',
|
||
|
correlation_id_value: '2ea9c4b8587b6df49f35a3fb703688aa',
|
||
|
external_identifiers: github_identifiers,
|
||
|
created_at: timestamp
|
||
|
)
|
||
|
end
|
||
|
|
||
|
let(:expected_data) do
|
||
|
{
|
||
|
type: 'pull_request',
|
||
|
title: 'Implement cool feature',
|
||
|
provider_url: 'https://github.com/example/repo/pull/2',
|
||
|
details: {
|
||
|
exception_class: import_failure.exception_class,
|
||
|
exception_message: import_failure.exception_message,
|
||
|
correlation_id_value: import_failure.correlation_id_value,
|
||
|
source: import_failure.source,
|
||
|
github_identifiers: github_identifiers,
|
||
|
created_at: timestamp.iso8601(3)
|
||
|
}
|
||
|
}.deep_stringify_keys
|
||
|
end
|
||
|
|
||
|
context 'when a single object is being serialized' do
|
||
|
let(:resource) { import_failure }
|
||
|
|
||
|
it 'serializes import failure' do
|
||
|
expect(serializer.represent(resource).as_json).to eq expected_data
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when multiple objects are being serialized' do
|
||
|
let(:count) { 3 }
|
||
|
let(:resource) { Array.new(count, import_failure) }
|
||
|
|
||
|
it 'serializes array of import failures' do
|
||
|
expect(serializer.represent(resource).as_json).to all(eq(expected_data))
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|