1 import { Person, TaxReturn } from '../core';
2 import { NotFoundError } from '../core/Errors';
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';
11 test('foreign tax credit, form 1116 not required', () => {
12 const filingStatusToForeignTax = {
13 [FilingStatus.Single]: 200,
14 [FilingStatus.MarriedFilingJoint]: 500,
15 [FilingStatus.MarriedFilingSeparate]: 200
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({
27 ordinaryDividends: 200000,
28 qualifiedDividends: 70000,
29 totalCapitalGain: 300,
30 foreignTaxPaid: filingStatusToForeignTax[filingStatus],
32 const f = new Schedule3();
35 expect(f.getValue(tr, '1')).toBe(filingStatusToForeignTax[filingStatus]);
39 test('foreign tax credit, form 1116 required', () => {
40 const filingStatusToForeignTax = {
41 [FilingStatus.Single]: 400,
42 [FilingStatus.MarriedFilingJoint]: 600,
43 [FilingStatus.MarriedFilingSeparate]: 400
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({
55 ordinaryDividends: 200000,
56 qualifiedDividends: 70000,
57 totalCapitalGain: 300,
58 foreignTaxPaid: filingStatusToForeignTax[filingStatus],
60 const f = new Schedule3();
63 expect(() => f.getValue(tr, '1')).toThrow(NotFoundError);