import { describe, expect, it } from 'vitest';
import {
parsePersonalState,
togglePersonalItemState
} from './personal-state';
describe('compare personal item state', () => {
it('parses stored boolean state and rejects malformed data', () => {
expect(
parsePersonalState(
'{"phone":{"owned":true,"wanted":false,"wishlisted":true}}'
)
).toEqual({
phone: { had: false, owned: true, wanted: true }
});
expect(
parsePersonalState(
'{"phone":{"owned":false,"wanted":false,"wishlisted":true}}'
)
).toEqual({
phone: { had: false, owned: false, wanted: true }
});
expect(parsePersonalState('broken')).toEqual({});
expect(parsePersonalState('[]')).toEqual({});
});
it('keeps owned and had exclusive while wanted stays independent', () => {
const wanted = togglePersonalItemState(
{},
'phone',
'wanted'
);
const owned = togglePersonalItemState(
wanted,
'phone',
'owned'
);
expect(owned.phone).toEqual({
had: false,
owned: true,
wanted: true
});
const had = togglePersonalItemState(owned, 'phone', 'had');
expect(had.phone).toEqual({
had: true,
owned: false,
wanted: true
});
});
it('deactivates the currently active status', () => {
const active = togglePersonalItemState(
{},
'phone',
'wanted'
);
const inactive = togglePersonalItemState(
active,
'phone',
'wanted'
);
expect(inactive.phone).toEqual({
had: false,
owned: false,
wanted: false
});
});
});
Browse the implementation files for Food Comparison.