-
Notifications
You must be signed in to change notification settings - Fork 25
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
avniproject/avni-webapp#1306 - more scenarios in BulkLocationCreatorI…
…ntegrationTest
- Loading branch information
1 parent
d934cf5
commit 5d07ce8
Showing
4 changed files
with
181 additions
and
100 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
92 changes: 0 additions & 92 deletions
92
...t/java/org/avni/server/importer/batch/csv/writer/BuildLocationCreatorIntegrationTest.java
This file was deleted.
Oops, something went wrong.
173 changes: 173 additions & 0 deletions
173
...st/java/org/avni/server/importer/batch/csv/writer/BulkLocationCreatorIntegrationTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,173 @@ | ||
package org.avni.server.importer.batch.csv.writer; | ||
|
||
import org.avni.server.common.AbstractControllerIntegrationTest; | ||
import org.avni.server.dao.LocationRepository; | ||
import org.avni.server.domain.AddressLevel; | ||
import org.avni.server.domain.AddressLevelType; | ||
import org.avni.server.domain.ConceptDataType; | ||
import org.avni.server.domain.factory.AddressLevelTypeBuilder; | ||
import org.avni.server.importer.batch.model.Row; | ||
import org.avni.server.service.LocationHierarchyService; | ||
import org.avni.server.service.builder.TestConceptService; | ||
import org.avni.server.service.builder.TestDataSetupService; | ||
import org.junit.Ignore; | ||
import org.junit.Test; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.test.context.jdbc.Sql; | ||
|
||
import java.util.*; | ||
|
||
import static org.avni.server.importer.batch.csv.writer.BulkLocationCreator.LocationTypesHeaderError; | ||
import static org.avni.server.importer.batch.csv.writer.BulkLocationCreator.UnknownHeadersErrorMessage; | ||
import static org.junit.Assert.assertEquals; | ||
import static org.junit.Assert.assertNotNull; | ||
|
||
@Sql(value = {"/tear-down.sql"}, executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD) | ||
@Sql(value = {"/tear-down.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD) | ||
public class BulkLocationCreatorIntegrationTest extends AbstractControllerIntegrationTest { | ||
@Autowired | ||
private TestDataSetupService testDataSetupService; | ||
@Autowired | ||
private BulkLocationCreator bulkLocationCreator; | ||
@Autowired | ||
private LocationHierarchyService locationHierarchyService; | ||
@Autowired | ||
private LocationRepository addressLevelRepository; | ||
@Autowired | ||
private TestConceptService testConceptService; | ||
@Autowired | ||
private LocationRepository locationRepository; | ||
private String hierarchy; | ||
|
||
@Override | ||
public void setUp() throws Exception { | ||
TestDataSetupService.TestOrganisationData organisationData = testDataSetupService.setupOrganisation(); | ||
AddressLevelType block = new AddressLevelTypeBuilder().name("Block").level(2d).withUuid(UUID.randomUUID()).build(); | ||
AddressLevelType district = new AddressLevelTypeBuilder().name("District").level(3d).withUuid(UUID.randomUUID()).build(); | ||
AddressLevelType state = new AddressLevelTypeBuilder().name("State").level(4d).withUuid(UUID.randomUUID()).build(); | ||
testDataSetupService.saveLocationTypes(Arrays.asList(block, district, state)); | ||
testConceptService.createCodedConcept("Coded Concept", "Answer 1", "Answer 2"); | ||
testConceptService.createConcept("Text Concept", ConceptDataType.Text); | ||
|
||
setUser(organisationData.getUser().getUsername()); | ||
Map<String, String> hierarchies = locationHierarchyService.determineAddressHierarchiesForAllAddressLevelTypesInOrg(); | ||
hierarchy = String.join(".", hierarchies.keySet()); | ||
} | ||
|
||
private static int newLocationsCreated(int count) { | ||
return count; | ||
} | ||
|
||
private static String[] header(String ... cells) { | ||
return cells; | ||
} | ||
|
||
private static String[] dataRow(String ... cells) { | ||
return cells; | ||
} | ||
|
||
private void treatAsDescriptor(String[] headers, String ... additionalHeaders) { | ||
long before = addressLevelRepository.count(); | ||
bulkLocationCreator.write(Collections.singletonList(new Row(headers, additionalHeaders)), hierarchy); | ||
long after = addressLevelRepository.count(); | ||
assertEquals(before, after); | ||
} | ||
|
||
private void success(String[] headers, String[] cells, int numberOfNewLocations) { | ||
long before = addressLevelRepository.count(); | ||
bulkLocationCreator.write(Collections.singletonList(new Row(headers, cells)), hierarchy); | ||
long after = addressLevelRepository.count(); | ||
assertEquals(before + newLocationsCreated(numberOfNewLocations), after); | ||
} | ||
|
||
private void failure(String[] headers, String[] cells, String errorMessage) { | ||
long before = addressLevelRepository.count(); | ||
try { | ||
bulkLocationCreator.write(Collections.singletonList(new Row(headers, cells)), hierarchy); | ||
} catch (Exception e) { | ||
assertEquals(errorMessage, e.getMessage()); | ||
} | ||
long after = addressLevelRepository.count(); | ||
assertEquals(before, after); | ||
} | ||
|
||
private String[] lineage(String ... lineage) { | ||
return lineage; | ||
} | ||
|
||
private void lineageExists(String ... lineage) { | ||
AddressLevel address = this.locationRepository.findByTitleLineageIgnoreCase(String.join(".", lineage)).get(); | ||
assertNotNull(address); | ||
} | ||
|
||
private void locationHasAttribute(String[] lineage, String concept) { | ||
AddressLevel address = this.locationRepository.findByTitleLineageIgnoreCase(String.join(".", lineage)).get(); | ||
assertNotNull(address.getLocationProperties().get(concept)); | ||
} | ||
|
||
@Test | ||
@Ignore | ||
public void shouldCreate() { | ||
success(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow("Bihar", "Vaishali", "Mahua", "23.45,43.85"), | ||
newLocationsCreated(3)); | ||
success(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow(" Bihar", " Vaishali ", " Jamui ", "23.20,43.85"), | ||
newLocationsCreated(1)); | ||
success(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow(" Bihar", " Darbhanga "), | ||
newLocationsCreated(1)); | ||
success(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow(" Bihar", " Aara ", " ", "24.20,43.85"), | ||
newLocationsCreated(1)); | ||
success(header(" State ", "District", " Block", " GPS coordinates"), | ||
dataRow(" Bihar", " Chapra ", " ", "24.20,43.85"), | ||
newLocationsCreated(1)); | ||
success(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow(" bihar", " VAISHALI ", " Tarora ", "23.20,43.85"), | ||
newLocationsCreated(1)); | ||
|
||
failure(header("State1", "District", "Block", "GPS coordinates"), | ||
dataRow("Bihar", "Vaishali", "Nijma", "23.45,43.85"), | ||
LocationTypesHeaderError); | ||
failure(header("State", "District2", "Block", "GPS coordinates"), | ||
dataRow("Bihar", "Vaishali", "Nijma", "23.45,43.85"), | ||
LocationTypesHeaderError); | ||
failure(header("State", "District", "Block", "GPS"), | ||
dataRow("Bihar", "Vaishali", "Nijma", "23.45,43.85"), | ||
UnknownHeadersErrorMessage); | ||
|
||
treatAsDescriptor(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow("Ex: state 1", "Ex: distr 1", "Ex: blo 1", "Ex. 23.45,43.85")); | ||
treatAsDescriptor(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow(" Ex: state 1", "Ex: distr 1 ", "Ex: blo 1", " Ex. 23.45,43.85 ")); | ||
|
||
|
||
//attributes | ||
success(header("State", "District", "Block", "GPS coordinates", "Coded Concept"), | ||
dataRow("Bihar", "Vaishali", "Block 1", "23.45,43.86", "Answer 1"), | ||
newLocationsCreated(1)); | ||
locationHasAttribute(lineage("Bihar", "Vaishali", "Block 1"), "Coded Concept"); | ||
|
||
success(header("State", "District", "Block", "GPS coordinates", " Coded Concept"), | ||
dataRow("Bihar", "Vaishali", "Block 2", "23.45,43.86", " Answer 1"), | ||
newLocationsCreated(1)); | ||
locationHasAttribute(lineage("Bihar", "Vaishali", "Block 2"), "Coded Concept"); | ||
|
||
success(header("State", "District", "Block", "GPS coordinates", "Text Concept"), | ||
dataRow("Bihar", "Vaishali", "Block 3", "23.45,43.86", "any text"), | ||
newLocationsCreated(1)); | ||
locationHasAttribute(lineage("Bihar", "Vaishali", "Block 3"), "Text Concept"); | ||
|
||
failure(header("State", "District", "Block", "GPS coordinates", "Coded Concept "), | ||
dataRow("Bihar", "Vaishali", "Block 4", "23.45,43.86", "not an answer to this concept"), | ||
""); | ||
|
||
// in random steps | ||
success(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow(" ", " ", "Block11", "23.45,43.85"), newLocationsCreated(1)); | ||
success(header("State", "District", "Block", "GPS coordinates"), | ||
dataRow("Bihar", "District1", "Block11"), newLocationsCreated(1)); | ||
lineageExists("Bihar", "District1", "Block11"); | ||
} | ||
} |