Heating Comparison Source Code

Browse the implementation files for Heating Comparison.
personal-state.spec.ts typescript
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
		});
	});
});

Description

Browse the implementation files for Heating Comparison.

References

  1. Tool.io on GitHub
  2. Tool.io TypeScript tools library

Similar or alternative tools

Don't forget to set a bookmark for tool.io!
Privacy | Imprint | Cookies