dawarich/spec/services/own_tracks/params_spec.rb
2024-03-23 13:36:09 +01:00

194 lines
5.2 KiB
Ruby

require 'rails_helper'
RSpec.describe OwnTracks::Params do
describe '#call' do
subject(:params) { described_class.new(raw_point_params).call }
let(:file_path) { 'spec/fixtures/owntracks_export.json' }
let(:file) { File.open(file_path) }
let(:json) { JSON.parse(file.read) }
let(:user) { json.keys.first }
let(:topic) { json[user].keys.first }
let(:raw_point_params) { json[user][topic].first }
let(:expected_json) do
{
latitude: 40.7128,
longitude: -74.006,
battery_status: 'unknown',
battery: 85,
ping: nil,
altitude: 41,
accuracy: 8,
vertical_accuracy: 3,
velocity: nil,
connection: 'wifi',
ssid: 'Home Wifi',
bssid: 'b0:f2:8:45:94:33',
trigger: 'unknown',
tracker_id: 'RO',
timestamp: 1706965203,
inrids: ['5f1d1b'],
in_regions: ['home'],
topic: 'owntracks/test/iPhone 12 Pro',
raw_data: {
'batt'=>85,
'lon'=>-74.006,
'acc'=>8,
'bs'=>2,
'inrids'=>['5f1d1b'],
'BSSID'=>'b0:f2:8:45:94:33',
'SSID'=>'Home Wifi',
'vac'=>3,
'inregions'=>['home'],
'lat'=>40.7128,
'topic'=>'owntracks/test/iPhone 12 Pro',
't'=>'p',
'conn'=>'w',
'm'=>1,
'tst'=>1706965203,
'alt'=>41,
'_type'=>'location',
'tid'=>'RO',
'_http'=>true,
'ghash'=>'u33d773',
'isorcv'=>'2024-02-03T13:00:03Z',
'isotst'=>'2024-02-03T13:00:03Z',
'disptst'=>'2024-02-03 13:00:03'
}
}
end
it 'returns parsed params' do
expect(params).to eq(expected_json)
end
context 'when battery status is unplugged' do
let(:raw_point_params) { super().merge(bs: 'u') }
it 'returns parsed params' do
expect(params[:battery_status]).to eq('unplugged')
end
end
context 'when battery status is charging' do
let(:raw_point_params) { super().merge(bs: 'c') }
it 'returns parsed params' do
expect(params[:battery_status]).to eq('charging')
end
end
context 'when battery status is full' do
let(:raw_point_params) { super().merge(bs: 'f') }
it 'returns parsed params' do
expect(params[:battery_status]).to eq('full')
end
end
context 'when trigger is background_event' do
let(:raw_point_params) { super().merge(m: 'p') }
it 'returns parsed params' do
expect(params[:trigger]).to eq('background_event')
end
end
context 'when trigger is circular_region_event' do
let(:raw_point_params) { super().merge(m: 'c') }
it 'returns parsed params' do
expect(params[:trigger]).to eq('circular_region_event')
end
end
context 'when trigger is beacon_event' do
let(:raw_point_params) { super().merge(m: 'b') }
it 'returns parsed params' do
expect(params[:trigger]).to eq('beacon_event')
end
end
context 'when trigger is report_location_message_event' do
let(:raw_point_params) { super().merge(m: 'r') }
it 'returns parsed params' do
expect(params[:trigger]).to eq('report_location_message_event')
end
end
context 'when trigger is manual_event' do
let(:raw_point_params) { super().merge(m: 'u') }
it 'returns parsed params' do
expect(params[:trigger]).to eq('manual_event')
end
end
context 'when trigger is timer_based_event' do
let(:raw_point_params) { super().merge(m: 't') }
it 'returns parsed params' do
expect(params[:trigger]).to eq('timer_based_event')
end
end
context 'when trigger is settings_monitoring_event' do
let(:raw_point_params) { super().merge(m: 'v') }
it 'returns parsed params' do
expect(params[:trigger]).to eq('settings_monitoring_event')
end
end
context 'when connection is mobile' do
let(:raw_point_params) { super().merge(conn: 'm') }
it 'returns parsed params' do
expect(params[:connection]).to eq('mobile')
end
end
context 'when connection is wifi' do
let(:raw_point_params) { super().merge(conn: 'w') }
it 'returns parsed params' do
expect(params[:connection]).to eq('wifi')
end
end
context 'when connection is offline' do
let(:raw_point_params) { super().merge(conn: 'o') }
it 'returns parsed params' do
expect(params[:connection]).to eq('offline')
end
end
context 'when connection is unknown' do
let(:raw_point_params) { super().merge(conn: 'unknown') }
it 'returns parsed params' do
expect(params[:connection]).to eq('unknown')
end
end
context 'when battery status is unknown' do
let(:raw_point_params) { super().merge(bs: 'unknown') }
it 'returns parsed params' do
expect(params[:battery_status]).to eq('unknown')
end
end
context 'when trigger is unknown' do
let(:raw_point_params) { super().merge(m: 'unknown') }
it 'returns parsed params' do
expect(params[:trigger]).to eq('unknown')
end
end
end
end