Implement Form.person() on fed2019 forms.
[ustaxlib.git] / src / fed2019 / Schedule3.test.ts
1 import { Person } from '../core';
2 import { NotFoundError } from '../core/Errors';
3
4 import Form1040, { FilingStatus } from './Form1040';
5 import Form1099DIV from './Form1099DIV';
6 import Form1116 from './Form1116';
7 import Form8949 from './Form8949';
8 import Schedule3 from './Schedule3';
9 import ScheduleD from './ScheduleD';
10 import TaxReturn from './TaxReturn';
11
12 test('foreign tax credit, form 1116 not required', () => {
13 const filingStatusToForeignTax = {
14 [FilingStatus.Single]: 200,
15 [FilingStatus.MarriedFilingJoint]: 500,
16 [FilingStatus.MarriedFilingSeparate]: 200
17 };
18
19 for (const filingStatus of Object.values(FilingStatus)) {
20 const p = Person.self('A');
21 const tr = new TaxReturn();
22 tr.addPerson(p);
23 tr.addForm(new Form1040({ filingStatus }));
24 tr.addForm(new Form8949);
25 tr.addForm(new ScheduleD);
26 tr.addForm(new Form1099DIV({
27 payer: 'Brokerage',
28 payee: p,
29 ordinaryDividends: 200000,
30 qualifiedDividends: 70000,
31 totalCapitalGain: 300,
32 foreignTaxPaid: filingStatusToForeignTax[filingStatus],
33 }));
34 const f = new Schedule3();
35 tr.addForm(f);
36
37 expect(f.getValue(tr, '1')).toBe(filingStatusToForeignTax[filingStatus]);
38 }
39 });
40
41 test('foreign tax credit, form 1116 required', () => {
42 const filingStatusToForeignTax = {
43 [FilingStatus.Single]: 400,
44 [FilingStatus.MarriedFilingJoint]: 600,
45 [FilingStatus.MarriedFilingSeparate]: 400
46 };
47
48 for (const filingStatus of Object.values(FilingStatus)) {
49 const p = Person.self('A');
50 const tr = new TaxReturn();
51 tr.addPerson(p);
52 tr.addForm(new Form1040({ filingStatus }));
53 tr.addForm(new Form8949);
54 tr.addForm(new ScheduleD);
55 tr.addForm(new Form1099DIV({
56 payer: 'Brokerage',
57 payee: p,
58 ordinaryDividends: 200000,
59 qualifiedDividends: 70000,
60 totalCapitalGain: 300,
61 foreignTaxPaid: filingStatusToForeignTax[filingStatus],
62 }));
63 const f = new Schedule3();
64 tr.addForm(f);
65
66 expect(() => f.getValue(tr, '1')).toThrow(NotFoundError);
67 }
68 });