dawarich/spec/requests/api/v1/stats_spec.rb

81 lines
2.2 KiB
Ruby
Raw Normal View History

2024-08-20 14:16:38 -04:00
# frozen_string_literal: true
2024-08-20 14:14:17 -04:00
require 'rails_helper'
2024-08-20 14:16:38 -04:00
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
create_list(:point, 85, :with_geodata, :reverse_geocoded, timestamp: Time.zone.local(2020), user:)
end
2024-08-20 14:16:38 -04:00
let!(:points_in_2021) { create_list(:point, 95, timestamp: Time.zone.local(2021), user:) }
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,
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 '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
2024-08-20 14:14:17 -04:00
end
end