mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 17:21:38 -05:00
92 lines
3.9 KiB
Ruby
92 lines
3.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'swagger_helper'
|
|
|
|
describe 'OwnTracks Points API', type: :request do
|
|
path '/api/v1/owntracks/points' do
|
|
post 'Creates a point' do
|
|
request_body_example value: {
|
|
'batt': 85,
|
|
'lon': -74.0060,
|
|
'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/jane/iPhone 12 Pro',
|
|
't': 'p',
|
|
'conn': 'w',
|
|
'm': 1,
|
|
'tst': 1_706_965_203,
|
|
'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'
|
|
}
|
|
tags 'Points'
|
|
consumes 'application/json'
|
|
parameter name: :point, in: :body, schema: {
|
|
type: :object,
|
|
properties: {
|
|
batt: { type: :number, description: 'Device battery level (percentage)' },
|
|
lon: { type: :number, description: 'Longitude coordinate' },
|
|
acc: { type: :number, description: 'Accuracy of position in meters' },
|
|
bs: { type: :number, description: 'Battery status (0=unknown, 1=unplugged, 2=charging, 3=full)' },
|
|
inrids: { type: :array, items: { type: :string }, description: 'Array of region IDs device is currently in' },
|
|
BSSID: { type: :string, description: 'Connected WiFi access point MAC address' },
|
|
SSID: { type: :string, description: 'Connected WiFi network name' },
|
|
vac: { type: :number, description: 'Vertical accuracy in meters' },
|
|
inregions: { type: :array, items: { type: :string }, description: 'Array of region names device is currently in' },
|
|
lat: { type: :number, description: 'Latitude coordinate' },
|
|
topic: { type: :string, description: 'MQTT topic in format owntracks/user/device' },
|
|
t: { type: :string, description: 'Type of message (p=position, c=circle, etc)' },
|
|
conn: { type: :string, description: 'Connection type (w=wifi, m=mobile, o=offline)' },
|
|
m: { type: :number, description: 'Motion state (0=stopped, 1=moving)' },
|
|
tst: { type: :number, description: 'Timestamp in Unix epoch time' },
|
|
alt: { type: :number, description: 'Altitude in meters' },
|
|
_type: { type: :string, description: 'Internal message type (usually "location")' },
|
|
tid: { type: :string, description: 'Tracker ID used to display the initials of a user' },
|
|
_http: { type: :boolean, description: 'Whether message was sent via HTTP (true) or MQTT (false)' },
|
|
ghash: { type: :string, description: 'Geohash of location' },
|
|
isorcv: { type: :string, description: 'ISO 8601 timestamp when message was received' },
|
|
isotst: { type: :string, description: 'ISO 8601 timestamp of the location fix' },
|
|
disptst: { type: :string, description: 'Human-readable timestamp of the location fix' }
|
|
},
|
|
required: %w[lat lon tst _type]
|
|
}
|
|
|
|
parameter name: :api_key, in: :query, type: :string, required: true, description: 'API Key'
|
|
|
|
response '200', 'Point created' do
|
|
let(:file_path) { 'spec/fixtures/files/owntracks/2024-03.rec' }
|
|
let(:file) { File.read(file_path) }
|
|
let(:json) { OwnTracks::RecParser.new(file).call }
|
|
let(:point) { json.first }
|
|
let(:api_key) { create(:user).api_key }
|
|
|
|
run_test!
|
|
end
|
|
|
|
response '401', 'Unauthorized' do
|
|
let(:file_path) { 'spec/fixtures/files/owntracks/2024-03.rec' }
|
|
let(:file) { File.read(file_path) }
|
|
let(:json) { OwnTracks::RecParser.new(file).call }
|
|
let(:point) { json.first }
|
|
let(:api_key) { nil }
|
|
|
|
run_test!
|
|
end
|
|
end
|
|
end
|
|
end
|