1 import { Person } 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';
10 import TaxReturn from './TaxReturn';
12 test('foreign tax credit, form 1116 not required', () => {
13 const filingStatusToForeignTax = {
14 [FilingStatus.Single]: 200,
15 [FilingStatus.MarriedFilingJoint]: 500,
16 [FilingStatus.MarriedFilingSeparate]: 200
19 for (const filingStatus of Object.values(FilingStatus)) {
20 const p = Person.self('A');
21 const tr = new TaxReturn();
23 tr.addForm(new Form1040({ filingStatus }));
24 tr.addForm(new Form8949);
25 tr.addForm(new ScheduleD);
26 tr.addForm(new Form1099DIV({
29 ordinaryDividends: 200000,
30 qualifiedDividends: 70000,
31 totalCapitalGain: 300,
32 foreignTaxPaid: filingStatusToForeignTax[filingStatus],
34 const f = new Schedule3();
37 expect(f.getValue(tr, '1')).toBe(filingStatusToForeignTax[filingStatus]);
41 test('foreign tax credit, form 1116 required', () => {
42 const filingStatusToForeignTax = {
43 [FilingStatus.Single]: 400,
44 [FilingStatus.MarriedFilingJoint]: 600,
45 [FilingStatus.MarriedFilingSeparate]: 400
48 for (const filingStatus of Object.values(FilingStatus)) {
49 const p = Person.self('A');
50 const tr = new TaxReturn();
52 tr.addForm(new Form1040({ filingStatus }));
53 tr.addForm(new Form8949);
54 tr.addForm(new ScheduleD);
55 tr.addForm(new Form1099DIV({
58 ordinaryDividends: 200000,
59 qualifiedDividends: 70000,
60 totalCapitalGain: 300,
61 foreignTaxPaid: filingStatusToForeignTax[filingStatus],
63 const f = new Schedule3();
66 expect(() => f.getValue(tr, '1')).toThrow(NotFoundError);