require 'spec_helper' describe ProjectMirrorEntity do subject(:entity) { described_class.new(project).as_json.deep_symbolize_keys } describe 'pull mirror' do let(:project) { create(:project, :mirror) } let(:import_data) { project.import_data } context 'password authentication' do before do import_data.update!(auth_method: 'password', password: 'fake password') end it 'represents the pull mirror' do is_expected.to eq( id: project.id, mirror: true, import_url: project.import_url, username_only_import_url: project.username_only_import_url, mirror_user_id: project.mirror_user_id, mirror_trigger_builds: project.mirror_trigger_builds, only_mirror_protected_branches: project.only_mirror_protected_branches, mirror_overwrites_diverged_branches: project.mirror_overwrites_diverged_branches, import_data_attributes: { id: import_data.id, auth_method: 'password', ssh_known_hosts: nil, ssh_known_hosts_fingerprints: [], ssh_known_hosts_verified_at: nil, ssh_known_hosts_verified_by_id: nil, ssh_public_key: nil }, remote_mirrors_attributes: [] ) end end context 'SSH public-key authentication' do before do project.import_url = "ssh://example.com" import_data.update!(auth_method: 'ssh_public_key', ssh_known_hosts: "example.com #{SSHKeygen.generate}") end it 'represents the pull mirror' do is_expected.to eq( id: project.id, mirror: true, import_url: project.import_url, username_only_import_url: project.username_only_import_url, mirror_user_id: project.mirror_user_id, mirror_trigger_builds: project.mirror_trigger_builds, only_mirror_protected_branches: project.only_mirror_protected_branches, mirror_overwrites_diverged_branches: project.mirror_overwrites_diverged_branches, import_data_attributes: { id: import_data.id, auth_method: 'ssh_public_key', ssh_known_hosts: import_data.ssh_known_hosts, ssh_known_hosts_fingerprints: import_data.ssh_known_hosts_fingerprints.as_json, ssh_known_hosts_verified_at: import_data.ssh_known_hosts_verified_at, ssh_known_hosts_verified_by_id: import_data.ssh_known_hosts_verified_by_id, ssh_public_key: import_data.ssh_public_key }, remote_mirrors_attributes: [] ) end end end describe 'push mirror' do let(:project) { create(:project, :repository, :remote_mirror) } let(:remote_mirror) { project.remote_mirrors.first } it 'represents the push mirror' do is_expected.to eq( id: project.id, mirror: false, import_url: nil, username_only_import_url: nil, mirror_user_id: nil, mirror_trigger_builds: false, only_mirror_protected_branches: true, mirror_overwrites_diverged_branches: nil, import_data_attributes: nil, remote_mirrors_attributes: [ { id: remote_mirror.id, url: remote_mirror.url, enabled: true } ] ) end end end