/*
* Copyright 2017 ThoughtWorks, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.thoughtworks.go.server.functional.helpers;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.io.UnsupportedEncodingException;
import org.springframework.mock.web.MockHttpServletResponse;
import org.apache.commons.lang.StringUtils;
public class CSVResponse {
private String tableContent;
private int csvReponseStatus;
private String contentType;
private List<String> allRows = new ArrayList<>();
private List<List> allColumns = new ArrayList<>();
public CSVResponse(MockHttpServletResponse response) throws UnsupportedEncodingException {
this(response.getContentAsString(), response.getStatus(), response.getContentType());
}
public CSVResponse(String tableContent) {
this(tableContent, -1, "you did not specify the content type");
}
public CSVResponse(String tableContent, int csvReponseStatus, String contentType) {
this.tableContent = tableContent;
this.csvReponseStatus = csvReponseStatus;
this.contentType = contentType;
initTable();
}
private void initTable() {
String[] rows = tableContent.split("\n");
for (int i = 0; i < rows.length; i++) {
this.allRows.add(rows[i]);
String[] columns = rows[i].split(",");
for (int j = 0; j < columns.length; j++) {
if (allColumns.size() <= j) {
allColumns.add(new ArrayList());
}
List oneColumn = allColumns.get(j);
oneColumn.add(columns[j]);
}
}
}
public boolean isCSV() {
return "text/csv".equals(contentType);
}
public boolean statusEquals(int status) {
return this.csvReponseStatus == status;
}
public boolean containsColumn(String... columns) {
List<String> targetColumn = null;
for (List column : this.allColumns) {
targetColumn = Arrays.asList(columns);
if (StringUtils.contains(column.toString(), targetColumn.toString())) {
return true;
}
}
return false;
}
public boolean containsRow(String... rows) {
List<String> targetRows = null;
for (String row : this.allRows) {
targetRows = Arrays.asList(rows);
List<String> storedRows = Arrays.asList(row.split(","));
if (StringUtils.contains(storedRows.toString(), targetRows.toString())) {
return true;
}
}
throw new RuntimeException("Failed to find " + targetRows + " in all allColumns " + this.allRows);
}
public boolean rowCout(int count) {
return this.allRows.size() == count;
}
}