Add license information.
[ustaxlib.git] / src / fed2019 / Schedule3.test.ts
1 // Copyright 2020 Blue Static <https://www.bluestatic.org>
2 // This program is free software licensed under the GNU General Public License,
3 // version 3.0. The full text of the license can be found in LICENSE.txt.
4 // SPDX-License-Identifier: GPL-3.0-only
5
6 import { Person } from '../core';
7 import { NotFoundError } from '../core/Errors';
8
9 import Form1040, { FilingStatus } from './Form1040';
10 import Form1099DIV from './Form1099DIV';
11 import Form1116 from './Form1116';
12 import Form8949 from './Form8949';
13 import Schedule3 from './Schedule3';
14 import ScheduleD from './ScheduleD';
15 import TaxReturn from './TaxReturn';
16
17 test('foreign tax credit, form 1116 not required', () => {
18 const filingStatusToForeignTax = {
19 [FilingStatus.Single]: 200,
20 [FilingStatus.MarriedFilingJoint]: 500,
21 [FilingStatus.MarriedFilingSeparate]: 200
22 };
23
24 for (const filingStatus of Object.values(FilingStatus)) {
25 const p = Person.self('A');
26 const tr = new TaxReturn();
27 tr.addPerson(p);
28 tr.addForm(new Form1040({ filingStatus }));
29 tr.addForm(new Form8949);
30 tr.addForm(new ScheduleD);
31 tr.addForm(new Form1099DIV({
32 payer: 'Brokerage',
33 payee: p,
34 ordinaryDividends: 200000,
35 qualifiedDividends: 70000,
36 totalCapitalGain: 300,
37 foreignTaxPaid: filingStatusToForeignTax[filingStatus],
38 }));
39 const f = new Schedule3();
40 tr.addForm(f);
41
42 expect(f.getValue(tr, '1')).toBe(filingStatusToForeignTax[filingStatus]);
43 }
44 });
45
46 test('foreign tax credit, form 1116 required', () => {
47 const filingStatusToForeignTax = {
48 [FilingStatus.Single]: 400,
49 [FilingStatus.MarriedFilingJoint]: 600,
50 [FilingStatus.MarriedFilingSeparate]: 400
51 };
52
53 for (const filingStatus of Object.values(FilingStatus)) {
54 const p = Person.self('A');
55 const tr = new TaxReturn();
56 tr.addPerson(p);
57 tr.addForm(new Form1040({ filingStatus }));
58 tr.addForm(new Form8949);
59 tr.addForm(new ScheduleD);
60 tr.addForm(new Form1099DIV({
61 payer: 'Brokerage',
62 payee: p,
63 ordinaryDividends: 200000,
64 qualifiedDividends: 70000,
65 totalCapitalGain: 300,
66 foreignTaxPaid: filingStatusToForeignTax[filingStatus],
67 }));
68 const f = new Schedule3();
69 tr.addForm(f);
70
71 expect(() => f.getValue(tr, '1')).toThrow(NotFoundError);
72 }
73 });