mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-10 01:01:39 -05:00
58 lines
2.3 KiB
Ruby
58 lines
2.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'rails_helper'
|
|
require 'oj'
|
|
|
|
RSpec.describe JsonStreamHandler do
|
|
let(:processor) { double('StreamProcessor') }
|
|
let(:handler) { described_class.new(processor) }
|
|
|
|
let(:payload) do
|
|
{
|
|
'counts' => { 'places' => 2, 'visits' => 1, 'points' => 1 },
|
|
'settings' => { 'theme' => 'dark' },
|
|
'areas' => [{ 'name' => 'Home' }],
|
|
'places' => [
|
|
{ 'name' => 'Cafe', 'latitude' => 1.0, 'longitude' => 2.0 },
|
|
{ 'name' => 'Library', 'latitude' => 3.0, 'longitude' => 4.0 }
|
|
],
|
|
'visits' => [
|
|
{
|
|
'name' => 'Morning Coffee',
|
|
'started_at' => '2025-01-01T09:00:00Z',
|
|
'ended_at' => '2025-01-01T10:00:00Z'
|
|
}
|
|
],
|
|
'points' => [
|
|
{ 'timestamp' => 1, 'lonlat' => 'POINT(2 1)' }
|
|
]
|
|
}
|
|
end
|
|
|
|
before do
|
|
allow(processor).to receive(:handle_section)
|
|
allow(processor).to receive(:handle_stream_value)
|
|
allow(processor).to receive(:finish_stream)
|
|
end
|
|
|
|
it 'streams configured sections and delegates other values immediately' do
|
|
Oj.saj_parse(handler, Oj.dump(payload, mode: :compat))
|
|
|
|
expect(processor).to have_received(:handle_section).with('counts', hash_including('places' => 2))
|
|
expect(processor).to have_received(:handle_section).with('settings', hash_including('theme' => 'dark'))
|
|
expect(processor).to have_received(:handle_section).with('areas', [hash_including('name' => 'Home')])
|
|
|
|
expect(processor).to have_received(:handle_stream_value).with('places', hash_including('name' => 'Cafe'))
|
|
expect(processor).to have_received(:handle_stream_value).with('places', hash_including('name' => 'Library'))
|
|
expect(processor).to have_received(:handle_stream_value).with('visits', hash_including('name' => 'Morning Coffee'))
|
|
expect(processor).to have_received(:handle_stream_value).with('points', hash_including('timestamp' => 1))
|
|
|
|
expect(processor).to have_received(:finish_stream).with('places')
|
|
expect(processor).to have_received(:finish_stream).with('visits')
|
|
expect(processor).to have_received(:finish_stream).with('points')
|
|
|
|
expect(processor).not_to have_received(:handle_section).with('places', anything)
|
|
expect(processor).not_to have_received(:handle_section).with('visits', anything)
|
|
expect(processor).not_to have_received(:handle_section).with('points', anything)
|
|
end
|
|
end
|