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