69 lines
1.9 KiB
JavaScript
69 lines
1.9 KiB
JavaScript
import { module, test } from 'qunit';
|
|
import { setupTest } from 'marco/tests/helpers';
|
|
|
|
module('Unit | Service | map-ui', function (hooks) {
|
|
setupTest(hooks);
|
|
|
|
test('it handles loading state correctly', function (assert) {
|
|
let service = this.owner.lookup('service:map-ui');
|
|
|
|
// Initial state
|
|
assert.strictEqual(
|
|
service.loadingState,
|
|
null,
|
|
'loadingState starts as null'
|
|
);
|
|
|
|
// Start loading search A
|
|
service.startLoading('search', 'A');
|
|
assert.deepEqual(
|
|
service.loadingState,
|
|
{ type: 'search', value: 'A' },
|
|
'loadingState is set to search A'
|
|
);
|
|
|
|
// Stop loading search A (successful case)
|
|
service.stopLoading('search', 'A');
|
|
assert.strictEqual(
|
|
service.loadingState,
|
|
null,
|
|
'loadingState is cleared when stopped with matching parameters'
|
|
);
|
|
});
|
|
|
|
test('it handles race condition: stopLoading only clears if parameters match', function (assert) {
|
|
let service = this.owner.lookup('service:map-ui');
|
|
|
|
// 1. Start loading search A
|
|
service.startLoading('search', 'A');
|
|
assert.deepEqual(service.loadingState, { type: 'search', value: 'A' });
|
|
|
|
// 2. Start loading search B (interruption)
|
|
// In a real app, search B would start before search A finishes.
|
|
service.startLoading('search', 'B');
|
|
assert.deepEqual(
|
|
service.loadingState,
|
|
{ type: 'search', value: 'B' },
|
|
'loadingState updates to search B'
|
|
);
|
|
|
|
// 3. Search A finishes and tries to stop loading
|
|
// The service should ignore this because current loading state is for B
|
|
service.stopLoading('search', 'A');
|
|
|
|
assert.deepEqual(
|
|
service.loadingState,
|
|
{ type: 'search', value: 'B' },
|
|
'loadingState remains search B even after stopping search A'
|
|
);
|
|
|
|
// 4. Search B finishes
|
|
service.stopLoading('search', 'B');
|
|
assert.strictEqual(
|
|
service.loadingState,
|
|
null,
|
|
'loadingState is cleared when search B stops'
|
|
);
|
|
});
|
|
});
|