mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
98 lines
2.9 KiB
Ruby
98 lines
2.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe StatsSerializer do
|
|
describe '#call' do
|
|
subject(:serializer) { described_class.new(user).call }
|
|
|
|
let!(:user) { create(:user) }
|
|
|
|
context 'when the user has no stats' do
|
|
let(:expected_json) do
|
|
{
|
|
"totalDistanceKm": 0,
|
|
"totalPointsTracked": 0,
|
|
"totalReverseGeocodedPoints": 0,
|
|
"totalCountriesVisited": 0,
|
|
"totalCitiesVisited": 0,
|
|
"yearlyStats": []
|
|
}.to_json
|
|
end
|
|
|
|
it 'returns the expected JSON' do
|
|
expect(serializer).to eq(expected_json)
|
|
end
|
|
end
|
|
|
|
context 'when the user has stats' do
|
|
let!(:stats_in_2020) { create_list(:stat, 12, year: 2020, user:) }
|
|
let!(:stats_in_2021) { create_list(:stat, 12, year: 2021, user:) }
|
|
let!(:points_in_2020) do
|
|
(1..85).map do |i|
|
|
create(:point, :with_geodata, :reverse_geocoded, timestamp: Time.zone.local(2020, 1, 1).to_i + i.hours, user:)
|
|
end
|
|
end
|
|
let!(:points_in_2021) do
|
|
(1..95).map do |i|
|
|
create(:point, :with_geodata, :reverse_geocoded, timestamp: Time.zone.local(2021, 1, 1).to_i + i.hours, user:)
|
|
end
|
|
end
|
|
let(:expected_json) do
|
|
{
|
|
"totalDistanceKm": stats_in_2020.map(&:distance).sum + stats_in_2021.map(&:distance).sum,
|
|
"totalPointsTracked": points_in_2020.count + points_in_2021.count,
|
|
"totalReverseGeocodedPoints": points_in_2020.count + points_in_2021.count,
|
|
"totalCountriesVisited": 1,
|
|
"totalCitiesVisited": 1,
|
|
"yearlyStats": [
|
|
{
|
|
"year": 2021,
|
|
"totalDistanceKm": 12,
|
|
"totalCountriesVisited": 1,
|
|
"totalCitiesVisited": 1,
|
|
"monthlyDistanceKm": {
|
|
"january": 1,
|
|
"february": 0,
|
|
"march": 0,
|
|
"april": 0,
|
|
"may": 0,
|
|
"june": 0,
|
|
"july": 0,
|
|
"august": 0,
|
|
"september": 0,
|
|
"october": 0,
|
|
"november": 0,
|
|
"december": 0
|
|
}
|
|
},
|
|
{
|
|
"year": 2020,
|
|
"totalDistanceKm": 12,
|
|
"totalCountriesVisited": 1,
|
|
"totalCitiesVisited": 1,
|
|
"monthlyDistanceKm": {
|
|
"january": 1,
|
|
"february": 0,
|
|
"march": 0,
|
|
"april": 0,
|
|
"may": 0,
|
|
"june": 0,
|
|
"july": 0,
|
|
"august": 0,
|
|
"september": 0,
|
|
"october": 0,
|
|
"november": 0,
|
|
"december": 0
|
|
}
|
|
}
|
|
]
|
|
}.to_json
|
|
end
|
|
|
|
it 'returns the expected JSON' do
|
|
expect(serializer).to eq(expected_json)
|
|
end
|
|
end
|
|
end
|
|
end
|