-
Notifications
You must be signed in to change notification settings - Fork 6
/
validate.spec.ts
149 lines (133 loc) · 5.97 KB
/
validate.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
import { UnitTestWrapper, assert, createTempSheet, fillInTempSheet, deleteTempSheet } from './utils.test';
import { DataValidationRow, LooselyTypedDataValidationRow } from '../src/types';
import validate from '../src/validate';
import getLastRowWithDataPresent from '../src/last-row';
/**
* test1 for validate()
*
*/
export function test1DataValidation(): UnitTestWrapper {
return (): void => {
const coinName = 'VAL_TEST1';
const sheet = createTempSheet(coinName);
const initialData: DataValidationRow[] = [
['', '', 0, '', 0, 0, 0, 0],
['', '', 0, '', 0, 0, 0, 0],
['2017-01-01', '', 1.0, '', 1.0, 1000, 0, 0],
['2017-01-02', '', 1.0, '', 1.0, 1000, 0, 0],
['2017-01-02', '', -0.5, '', 0, 0, 0.5, 2000],
['2017-01-01', '', 1.0, '', 0, 0, 1.0, 2000]];
const testRun = function (): void {
let result = '';
if (typeof ScriptApp === 'undefined') {
// jest unit test
initialData.splice(0, 2); // remove the empty 2-row header
result = validate(initialData);
} else if (sheet !== null) {
// QUnit unit test
const dateDisplayValues = sheet.getRange('E:E').getDisplayValues();
const lastRow = getLastRowWithDataPresent(dateDisplayValues);
result = validate(sheet.getRange(`A3:H${lastRow}`).getValues() as LooselyTypedDataValidationRow[]);
}
assert((result === ''), false, 'Test for Date Out of Order Validation : Validation Error : expected validation to fail');
};
fillInTempSheet(sheet, initialData as string[][]);
testRun();
deleteTempSheet(sheet);
};
}
/**
* test2 for function validate(sheet)
*/
export function test2DataValidation(): UnitTestWrapper {
return (): void => {
const coinName = 'VAL_TEST2';
const sheet = createTempSheet(coinName);
const initialData: DataValidationRow[] = [
['', '', 0, '', 0, 0, 0, 0],
['', '', 0, '', 0, 0, 0, 0],
['2017-01-01', '', 1.0, '', 1.0, 1000, 0, 0],
['2017-01-02', '', 1.0, '', 1.0, 1000, 0, 0],
['2017-01-03', '', -0.5, '', 0, 0, 0.5, 2000],
['2017-01-04', '', 2.0, '', 0, 0, 2.0, 2000]];
const testRun = function (): void {
let result = '';
if (typeof ScriptApp === 'undefined') {
// jest unit test
initialData.splice(0, 2); // remove the empty 2-row header
result = validate(initialData);
} else if (sheet !== null) {
// QUnit unit test
const dateDisplayValues = sheet.getRange('E:E').getDisplayValues();
const lastRow = getLastRowWithDataPresent(dateDisplayValues);
result = validate(sheet.getRange(`A3:H${lastRow}`).getValues() as LooselyTypedDataValidationRow[]);
}
assert((result === ''), false, 'Test for Coin Oversold Condition : Validation Error : expected validation to fail');
};
fillInTempSheet(sheet, initialData as string[][]);
testRun();
deleteTempSheet(sheet);
};
}
/**
* test3 for function validate(sheet)
*/
export function test3DataValidation(): UnitTestWrapper {
return (): void => {
const coinName = 'VAL_TEST3';
const sheet = createTempSheet(coinName);
const initialData: DataValidationRow[] = [
['', '', 0, '', 0, 0, 0, 0],
['', '', 0, '', 0, 0, 0, 0],
['2017-01-01', '', 1.0, '', 1.0, 1000, 0, 0],
['2017-01-02', '', -0.5, '', 1.0, 1000, 0.5, 0],
['2017-01-03', '', -0.5, '', 0, 0, 0.5, 2000]];
const testRun = function (): void {
let result = '';
if (typeof ScriptApp === 'undefined') {
initialData.splice(0, 2); // remove the empty 2-row header
result = validate(initialData);
} else if (sheet !== null) {
// QUnit unit test
const dateDisplayValues = sheet.getRange('E:E').getDisplayValues();
const lastRow = getLastRowWithDataPresent(dateDisplayValues);
result = validate(sheet.getRange(`A3:H${lastRow}`).getValues() as LooselyTypedDataValidationRow[]);
}
assert((result === ''), false, 'Test for Buy and Sell on Same Line : Validation Error : expected validation to fail');
};
fillInTempSheet(sheet, initialData as string[][]);
testRun();
deleteTempSheet(sheet);
};
}
/**
* test4 for function validate(sheet)
*/
export function test4DataValidation(): UnitTestWrapper {
return (): void => {
const coinName = 'VAL_TEST4';
const sheet = createTempSheet(coinName);
const initialData: DataValidationRow[] = [
['', '', 0, '', 0, 0, 0, 0],
['', '', 0, '', 0, 0, 0, 0],
['2009-01-02', '', +50, '', 50.0, 0.50, 0, 0],
['2021-04-04', '', -0.00003998, '', 0, 0, 0.00003998, 2.33],
['2021-04-04', '', -49.99996002, '', 0, 0, 49.99996002, 2908867.67]];
const testRun = function (): void {
let result = '';
if (typeof ScriptApp === 'undefined') {
initialData.splice(0, 2); // remove the empty 2-row header
result = validate(initialData);
} else if (sheet !== null) {
// QUnit unit test
const dateDisplayValues = sheet.getRange('E:E').getDisplayValues();
const lastRow = getLastRowWithDataPresent(dateDisplayValues);
result = validate(sheet.getRange(`A3:H${lastRow}`).getValues() as LooselyTypedDataValidationRow[]);
}
assert((result === ''), false, 'Test for Out of Range Date : Validation Error : expected validation to fail');
};
fillInTempSheet(sheet, initialData as string[][]);
testRun();
deleteTempSheet(sheet);
};
}