mirror of
https://github.com/we-promise/sure.git
synced 2026-05-11 14:45:01 +00:00
feat(api): expose sync status (#1635)
* feat(api): expose sync status * fix(api): harden sync status review paths * fix(api): address sync status review * fix(api): tighten sync status review fixes * fix(api): address sync status review * test(api): avoid secret-like sync fixture key * test(api): reuse sync status fixture key * fix(api): align sync route helpers * fix(api): tighten sync status scoping * fix(api): make sync status schema nullable-compliant
This commit is contained in:
@@ -200,6 +200,46 @@ class SyncTest < ActiveSupport::TestCase
|
||||
assert_equal "stale", stale_syncing.reload.status
|
||||
end
|
||||
|
||||
test "ordered uses id as deterministic tie breaker" do
|
||||
timestamp = Time.current.change(usec: 0)
|
||||
older_id = SecureRandom.uuid
|
||||
newer_id = SecureRandom.uuid
|
||||
older_id, newer_id = [ older_id, newer_id ].sort
|
||||
|
||||
older_sync = Sync.create!(id: older_id, syncable: accounts(:depository), status: :completed, created_at: timestamp)
|
||||
newer_sync = Sync.create!(id: newer_id, syncable: accounts(:connected), status: :completed, created_at: timestamp)
|
||||
|
||||
ordered_ids = Sync.where(id: [ older_sync.id, newer_sync.id ]).ordered.pluck(:id)
|
||||
|
||||
assert_equal [ newer_sync.id, older_sync.id ], ordered_ids
|
||||
end
|
||||
|
||||
test "for_family includes syncable provider item associations from family reflections" do
|
||||
family = families(:dylan_family)
|
||||
syncable_item_associations = Family.reflect_on_all_associations(:has_many).select do |association|
|
||||
association.name.to_s.end_with?("_items") &&
|
||||
association.klass.included_modules.include?(Syncable)
|
||||
rescue NameError
|
||||
false
|
||||
end
|
||||
|
||||
syncs = syncable_item_associations.filter_map do |association|
|
||||
syncable = family.public_send(association.name).first
|
||||
next unless syncable
|
||||
|
||||
Sync.create!(syncable: syncable, status: :completed)
|
||||
end
|
||||
|
||||
assert syncs.any?, "Expected syncable provider item fixtures for this family"
|
||||
assert_equal syncs.map(&:id).sort, Sync.for_family(family).where(id: syncs.map(&:id)).pluck(:id).sort
|
||||
end
|
||||
|
||||
test "api error payload is present for failed syncs without raw error text" do
|
||||
sync = Sync.create!(syncable: accounts(:depository), status: :failed)
|
||||
|
||||
assert_equal({ message: "Sync failed" }, sync.api_error_payload)
|
||||
end
|
||||
|
||||
test "expand_window_if_needed widens start and end dates on a pending sync" do
|
||||
initial_start = 1.day.ago.to_date
|
||||
initial_end = 1.day.ago.to_date
|
||||
|
||||
Reference in New Issue
Block a user