2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END============================================
20 * ===================================================================
24 import CsvToJson from './CsvToJson'
26 describe('Verify CsvToJson', () => {
31 "Element Description",
36 const jsonKeyNames = [
44 const mandatory = [ true, true, true, true, false ];
46 it('Test CsvToJson No Error Case, Quoted Columns', () => {
48 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
49 rawCsv += '"alertType","Alert Type","Type of Alert","string","","admin","2020-06-11T13:56:14.927437Z"';
51 let expectedResult = {
55 description: "Type of Alert",
57 shortName: "alertType",
64 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
67 it('Test CsvToJson No Error Case, Unquoted Columns', () => {
69 let rawCsv = 'Element Short Name,Element Name,Element Description,Element Type,Sub-Dictionary\n';
70 rawCsv += 'alertType,Alert Type,Type of Alert,string,,admin,2020-06-11T13:56:14.927437Z';
72 let expectedResult = {
76 description: "Type of Alert",
78 shortName: "alertType",
85 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
88 it('Test CsvToJson Properly Escaped Double Quote and Delimiter', () => {
90 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
91 rawCsv += '"alertType","Alert ""Type""","Type of Alert, Varies","string","","admin","2020-06-11T13:56:14.927437Z"';
93 let errorMessage = '';
95 let expectedResult = {
96 errorMessages: errorMessage,
99 description: "Type of Alert, Varies",
100 name: 'Alert "Type"',
101 shortName: 'alertType',
109 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
113 it('Test CsvToJson Error Header Mismatch Error Case', () => {
115 let rawCsv = '"Element Short Names","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
116 rawCsv += '"alertType","Alert Type","Type of Alert","string","","admin","2020-06-11T13:56:14.927437Z"';
118 let errorMessage = 'Row 1 header key at column #1 is a mismatch. Expected row header must contain at least:\n';
119 errorMessage += 'Element Short Name,Element Name,Element Description,Element Type,Sub-Dictionary';
121 let expectedResult = {
122 errorMessages: errorMessage,
126 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
129 it('Test CsvToJson Error Mismatched Double Quotes in Column', () => {
131 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
132 rawCsv += '"alert"Type","Alert Type","Type of Alert","string","","admin","2020-06-11T13:56:14.927437Z"';
134 let errorMessage = '\nRow #2 is badly formatted at column #1. Perhaps an unescaped double quote.'
136 let expectedResult = {
137 errorMessages: errorMessage,
141 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
144 it('Test CsvToJson Error Illegal Whitespace', () => {
146 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
147 rawCsv += 'alertType , "Alert Type","Type of Alert","string","","admin","2020-06-11T13:56:14.927437Z"';
149 let errorMessage = '\nMismatched double quotes or illegal whitespace around delimiter at row #2 near column #2';
151 let expectedResult = {
152 errorMessages: errorMessage,
156 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
159 it('Test CsvToJson Error Too Few Data Columns', () => {
161 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
162 rawCsv += '"alertType","Alert Type","Type of Alert"';
164 let errorMessage = '\nNot enough columns (5) at row #2';
166 let expectedResult = {
167 errorMessages: errorMessage,
171 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
174 it('Test CsvToJson Error Wrong Header Column Order', () => {
176 let rawCsv = '"Element Name","Element Short Name","Element Description","Element Type","Sub-Dictionary"\n';
177 rawCsv += '"alertType","Alert Type","Type of Alert","string","","admin","2020-06-11T13:56:14.927437Z"';
179 let errorMessage = 'Row 1 header key at column #1 is a mismatch. Expected row header must contain at least:\n';
180 errorMessage += 'Element Short Name,Element Name,Element Description,Element Type,Sub-Dictionary';
182 let expectedResult = {
183 errorMessages: errorMessage,
187 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
190 it('Test CsvToJson Error Not Enough Rows', () => {
192 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
194 let errorMessage = '\nNot enough row data found in import file. Need at least a header row and one row of data';
196 let expectedResult = {
197 errorMessages: errorMessage,
201 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
204 it('Test CsvToJson Error Mandatory Field Is Empty', () => {
206 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
207 rawCsv += '"","Alert Type","Type of Alert","string","","admin","2020-06-11T13:56:14.927437Z"';
209 let expectedResult = {
210 errorMessages: '\nElement Short Name at row #2 is empty but requires a value.',
214 expect(CsvToJson(rawCsv, ',', '|', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
217 it('Test CsvToJson Error Mismatched Double Quotes At End', () => {
219 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
220 rawCsv += '"alertType","Alert Type","Alert Type Description","string","admin","2020-06-11T13:56:14.927437Z';
222 let expectedResult = {
223 errorMessages: '\nMismatched double quotes at row #2',
227 expect(CsvToJson(rawCsv, ',', '||', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);
230 it('Test CsvToJson Error Mismatched Mandatory Array Parameters', () => {
232 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
233 rawCsv += '"alertType","Alert Type","Alert Type Description","string","admin","2020-06-11T13:56:14.927437Z';
235 let expectedResult = {
236 errorMessages: 'interanl error: csvHeaderNames, jsonKeyNames, and mandatory arrays parameters are not the same length',
240 expect(CsvToJson(rawCsv, ',', '||', hdrNames, jsonKeyNames, [ true ])).toEqual(expectedResult);
243 it('Test CsvToJson Error Empty Mandatory Array Parameters', () => {
245 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
246 rawCsv += '"alertType","Alert Type","Alert Type Description","string","admin","2020-06-11T13:56:14.927437Z';
248 let expectedResult = {
249 errorMessages: 'interanl error: csvHeaderNames, jsonKeyNames, and mandatory arrays have no entries',
253 expect(CsvToJson(rawCsv, ',', '||', [], [], [])).toEqual(expectedResult);
256 it('Test CsvToJson Error Illegal Data Contains Internal Delimiter', () => {
258 let rawCsv = '"Element Short Name","Element Name","Element Description","Element Type","Sub-Dictionary"\n';
259 rawCsv += '"alertType","Alert Type","Alert Type||Description","string","admin","2020-06-11T13:56:14.927437Z';
261 let expectedResult = {
262 errorMessages: '\nRow #1 contains illegal sequence of characters (||)',
266 expect(CsvToJson(rawCsv, ',', '||', hdrNames, jsonKeyNames, mandatory)).toEqual(expectedResult);