mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-11 09:41:40 -05:00
149 lines
4.6 KiB
Ruby
149 lines
4.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe Photos::Search do
|
|
let(:user) { create(:user) }
|
|
let(:start_date) { '2024-01-01' }
|
|
let(:end_date) { '2024-03-01' }
|
|
let(:service) { described_class.new(user, start_date: start_date, end_date: end_date) }
|
|
|
|
describe '#call' do
|
|
context 'when user has no integrations configured' do
|
|
before do
|
|
allow(user).to receive(:immich_integration_configured?).and_return(false)
|
|
allow(user).to receive(:photoprism_integration_configured?).and_return(false)
|
|
end
|
|
|
|
it 'returns an empty array' do
|
|
expect(service.call).to eq([])
|
|
end
|
|
end
|
|
|
|
context 'when user has Immich integration configured' do
|
|
let(:immich_photo) { { 'type' => 'image', 'id' => '1' } }
|
|
let(:serialized_photo) { { id: '1', source: 'immich' } }
|
|
|
|
before do
|
|
allow(user).to receive(:immich_integration_configured?).and_return(true)
|
|
allow(user).to receive(:photoprism_integration_configured?).and_return(false)
|
|
|
|
allow_any_instance_of(Immich::RequestPhotos).to receive(:call)
|
|
.and_return([immich_photo])
|
|
|
|
allow_any_instance_of(Api::PhotoSerializer).to receive(:call)
|
|
.and_return(serialized_photo)
|
|
end
|
|
|
|
it 'fetches and transforms Immich photos' do
|
|
expect(service.call).to eq([serialized_photo])
|
|
end
|
|
end
|
|
|
|
context 'when user has Photoprism integration configured' do
|
|
let(:photoprism_photo) { { 'Type' => 'image', 'id' => '2' } }
|
|
let(:serialized_photo) { { id: '2', source: 'photoprism' } }
|
|
|
|
before do
|
|
allow(user).to receive(:immich_integration_configured?).and_return(false)
|
|
allow(user).to receive(:photoprism_integration_configured?).and_return(true)
|
|
|
|
allow_any_instance_of(Photoprism::RequestPhotos).to receive(:call)
|
|
.and_return([photoprism_photo])
|
|
|
|
allow_any_instance_of(Api::PhotoSerializer).to receive(:call)
|
|
.and_return(serialized_photo)
|
|
end
|
|
|
|
it 'fetches and transforms Photoprism photos' do
|
|
expect(service.call).to eq([serialized_photo])
|
|
end
|
|
end
|
|
|
|
context 'when user has both integrations configured' do
|
|
let(:immich_photo) { { 'type' => 'image', 'id' => '1' } }
|
|
let(:photoprism_photo) { { 'Type' => 'image', 'id' => '2' } }
|
|
let(:serialized_immich) do
|
|
{
|
|
id: '1',
|
|
latitude: nil,
|
|
longitude: nil,
|
|
localDateTime: nil,
|
|
originalFileName: nil,
|
|
city: nil,
|
|
state: nil,
|
|
country: nil,
|
|
type: 'image',
|
|
source: 'immich',
|
|
orientation: 'landscape'
|
|
}
|
|
end
|
|
let(:serialized_photoprism) do
|
|
{
|
|
id: '2',
|
|
latitude: nil,
|
|
longitude: nil,
|
|
localDateTime: nil,
|
|
originalFileName: nil,
|
|
city: nil,
|
|
state: nil,
|
|
country: nil,
|
|
type: 'image',
|
|
source: 'photoprism',
|
|
orientation: 'landscape'
|
|
}
|
|
end
|
|
|
|
before do
|
|
allow(user).to receive(:immich_integration_configured?).and_return(true)
|
|
allow(user).to receive(:photoprism_integration_configured?).and_return(true)
|
|
|
|
allow_any_instance_of(Immich::RequestPhotos).to receive(:call)
|
|
.and_return([immich_photo])
|
|
allow_any_instance_of(Photoprism::RequestPhotos).to receive(:call)
|
|
.and_return([photoprism_photo])
|
|
end
|
|
|
|
it 'fetches and transforms photos from both services' do
|
|
expect(service.call).to eq([serialized_immich, serialized_photoprism])
|
|
end
|
|
end
|
|
|
|
context 'when filtering out videos' do
|
|
let(:immich_photo) { { 'type' => 'video', 'id' => '1' } }
|
|
|
|
before do
|
|
allow(user).to receive(:immich_integration_configured?).and_return(true)
|
|
allow(user).to receive(:photoprism_integration_configured?).and_return(false)
|
|
|
|
allow_any_instance_of(Immich::RequestPhotos).to receive(:call)
|
|
.and_return([immich_photo])
|
|
end
|
|
|
|
it 'excludes video assets' do
|
|
expect(service.call).to eq([])
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#initialize' do
|
|
context 'with default parameters' do
|
|
let(:service_default) { described_class.new(user) }
|
|
|
|
it 'sets default start_date' do
|
|
expect(service_default.start_date).to eq('1970-01-01')
|
|
end
|
|
|
|
it 'sets default end_date to nil' do
|
|
expect(service_default.end_date).to be_nil
|
|
end
|
|
end
|
|
|
|
context 'with custom parameters' do
|
|
it 'sets custom dates' do
|
|
expect(service.start_date).to eq(start_date)
|
|
expect(service.end_date).to eq(end_date)
|
|
end
|
|
end
|
|
end
|
|
end
|