mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
86 lines
2.5 KiB
Ruby
86 lines
2.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
|
|
RSpec.describe 'Api::V1::Stats', type: :request do
|
|
let(:user) { create(:user) }
|
|
|
|
describe 'GET /index' do
|
|
let!(:user) { create(:user) }
|
|
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) / 1000,
|
|
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: (stats_in_2021.map(&:distance).sum / 1000).to_i,
|
|
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: (stats_in_2020.map(&:distance).sum / 1000).to_i,
|
|
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 'renders a successful response' do
|
|
get api_v1_areas_url(api_key: user.api_key)
|
|
expect(response).to be_successful
|
|
end
|
|
|
|
it 'returns the stats' do
|
|
get api_v1_stats_url(api_key: user.api_key)
|
|
|
|
expect(response).to be_successful
|
|
expect(response.body).to eq(expected_json)
|
|
end
|
|
end
|
|
end
|