package com.nightscout.core.barcode;
import org.junit.Before;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
public class NSBarcodeConfigTest {
String jsonConfig;
NSBarcodeConfig barcode;
@Before
public void setUp() {
jsonConfig = "";
barcode = null;
}
private void setBarcode() {
barcode = new NSBarcodeConfig(jsonConfig);
}
private void setValidMongoOnlyNoCollections() {
jsonConfig = "{'mongo':{'uri':'mongodb://user:pass@test.com/cgm_data'}}";
setBarcode();
}
private void setSingleValidApiOnly() {
jsonConfig = "{'rest':{'endpoint':['http://abc@test.com/v1']}}";
setBarcode();
}
private void setValidMqttUriOnly() {
jsonConfig = "{'mqtt':{'uri':'ssl://test:test@m11.cloudmqtt.com:12345'}}";
setBarcode();
}
private void setSingleValidApiAndMongo() {
jsonConfig = "{'mongo':{'uri':'mongodb://user:pass@test.com/cgm_data'}, 'rest':{'endpoint':['http://abc@test.com/v1']}}";
setBarcode();
}
private void setSingleValidApiAndMqtt() {
jsonConfig = "{'mqtt':{'uri':'ssl://test:test@m11.cloudmqtt.com:12345'}, 'rest':{'endpoint':['http://abc@test.com/v1']}}";
setBarcode();
}
private void setMongoAndMqtt() {
jsonConfig = "{'mqtt':{'uri':'ssl://test:test@m11.cloudmqtt.com:12345'}, 'mongo':{'uri':'mongodb://user:pass@test.com/cgm_data'}}";
setBarcode();
}
private void setMongoMqttAndSingleApi() {
jsonConfig = "{'mqtt':{'uri':'ssl://test:test@m11.cloudmqtt.com:12345'}, 'mongo':{'uri':'mongodb://user:pass@test.com/cgm_data'},'rest':{'endpoint':['http://abc@test.com/v1']}}";
setBarcode();
}
private void setMultipleValidApiOnly() {
jsonConfig = "{'rest':{'endpoint':['http://abc@test.com/v1', 'http://test.com/']}}";
setBarcode();
}
private void setEmptyValidApiOnly() {
jsonConfig = "{'rest':{'endpoint':[]}}";
setBarcode();
}
private void setEmptyValidMongoOnly() {
jsonConfig = "{'mongo':{}";
setBarcode();
}
private void setInvalidConfigWithValidJson() {
jsonConfig = "{'some':{'random':['values']}}";
setBarcode();
}
private void setInvalidJson() {
jsonConfig = "{foo bar";
setBarcode();
}
private void verifySingleApiUri() {
List<String> uris = new ArrayList<>();
uris.add("http://abc@test.com/v1");
assertThat(barcode.getApiUris(), is(uris));
}
private void verifyMultipleApiUri() {
List<String> uris = new ArrayList<>();
uris.add("http://abc@test.com/v1");
uris.add("http://test.com/");
assertThat(barcode.getApiUris(), is(uris));
}
private void verifyMongoUri() {
assertThat(barcode.getMongoUri().get(), is("mongodb://user:pass@test.com/cgm_data"));
}
private void verifySingleMqttUri() {
assertThat(barcode.getMqttUri().get(), is("ssl://test:test@m11.cloudmqtt.com:12345"));
}
@Test
public void testMongoEnabledWithMongoConfig() {
setValidMongoOnlyNoCollections();
assertThat(barcode.hasMongoConfig(), is(true));
}
@Test
public void testApiNotEnabledWithMongoConfig() {
setValidMongoOnlyNoCollections();
assertThat(barcode.hasApiConfig(), is(false));
}
@Test
public void testMqttNotEnabledWithMongoConfig() {
setValidMongoOnlyNoCollections();
assertThat(barcode.hasMqttConfig(), is(false));
}
@Test
public void testMongoUriSetWithMongoConfig() {
setValidMongoOnlyNoCollections();
verifyMongoUri();
}
@Test
public void testApiEnabledWithApiConfig() {
setSingleValidApiOnly();
assertThat(barcode.hasApiConfig(), is(true));
}
@Test
public void testMongoIsNotEnabledWithApiConfig() {
setSingleValidApiOnly();
assertThat(barcode.hasMongoConfig(), is(false));
}
@Test
public void testApiIsNotEnabledWithMqttConfig() {
setValidMqttUriOnly();
assertThat(barcode.hasApiConfig(), is(false));
}
@Test
public void testMqttEnabledWithMqttConfig() {
setValidMqttUriOnly();
assertThat(barcode.hasMqttConfig(), is(true));
}
@Test
public void testMongoIsNotEnabledWithMqttConfig() {
setValidMqttUriOnly();
assertThat(barcode.hasMongoConfig(), is(false));
}
@Test
public void testMqttIsNotEnabledWithApiConfig() {
setSingleValidApiOnly();
assertThat(barcode.hasMqttConfig(), is(false));
}
@Test
public void testApiUriIsSetWithApiConfig() {
setSingleValidApiOnly();
verifySingleApiUri();
}
@Test
public void testMqttUriIsSetWithMqttConfig() {
setValidMqttUriOnly();
verifySingleMqttUri();
}
@Test
public void testSingleApiUriAndMongoEnablesMongoWithApiAndMongoConfig() {
setSingleValidApiAndMongo();
assertThat(barcode.hasMongoConfig(), is(true));
}
@Test
public void testSingleApiUriAndMongoEnablesApiWithApiAndMongoConfig() {
setSingleValidApiAndMongo();
assertThat(barcode.hasApiConfig(), is(true));
}
@Test
public void testSingleApiUriAndMongoSetsApiWithApiAndMongoConfig() {
setSingleValidApiAndMongo();
verifySingleApiUri();
}
@Test
public void testSingleApiUriAndMongoSetsMongoWithApiAndMongoConfig() {
setSingleValidApiAndMongo();
verifyMongoUri();
}
@Test
public void testMultipleValidApiUriEnablesApiWithApiConfig() {
setMultipleValidApiOnly();
assertThat(barcode.hasApiConfig(), is(true));
}
@Test
public void testMultipleValidApiUriDoesNotEnableMongoWithApiConfig() {
setMultipleValidApiOnly();
assertThat(barcode.hasMongoConfig(), is(false));
}
@Test
public void testMultipleValidApiUriSetsApiWithApiConfig() {
setMultipleValidApiOnly();
verifyMultipleApiUri();
}
@Test
public void testEmptyValidApiDoesNotEnableApiWithApiConfig() {
setEmptyValidApiOnly();
assertThat(barcode.hasApiConfig(), is(false));
}
@Test
public void testEmptyValidApiDoesNotEnableMongoWithApiConfig() {
setEmptyValidApiOnly();
assertThat(barcode.hasMongoConfig(), is(false));
}
@Test
public void testEmptyValidMongoDoesNotEnableApiWithApiConfig() {
setEmptyValidMongoOnly();
assertThat(barcode.hasApiConfig(), is(false));
}
@Test
public void testEmptyValidMongoDoesNotEnableMongoWithApiConfig() {
setEmptyValidMongoOnly();
assertThat(barcode.hasMongoConfig(), is(false));
}
@Test
public void testInvalidConfigWithValidJsonDoesNotEnableMongo() {
setInvalidConfigWithValidJson();
assertThat(barcode.hasMongoConfig(), is(false));
}
@Test
public void testInvalidConfigWithValidJsonDoesNotEnableApi() {
setInvalidConfigWithValidJson();
assertThat(barcode.hasApiConfig(), is(false));
}
@Test
public void testInvalidJsonDoesNotEnableMongo() {
setInvalidJson();
assertThat(barcode.hasMongoConfig(), is(false));
}
@Test
public void testInvalidJsonDoesNotEnableApi() {
setInvalidJson();
assertThat(barcode.hasApiConfig(), is(false));
}
}