132 lines
5.3 KiB
Java
132 lines
5.3 KiB
Java
/*
|
|
* (C) Copyright 2014-2016 Hewlett Packard Enterprise Development LP
|
|
*
|
|
* 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 monasca.api.integration;
|
|
|
|
import static org.testng.Assert.assertEquals;
|
|
import static org.testng.Assert.assertNotNull;
|
|
import static org.testng.Assert.assertNull;
|
|
import static org.testng.Assert.fail;
|
|
|
|
import java.nio.charset.Charset;
|
|
|
|
import javax.ws.rs.core.MediaType;
|
|
|
|
import org.skife.jdbi.v2.DBI;
|
|
import org.skife.jdbi.v2.Handle;
|
|
import org.testng.annotations.BeforeTest;
|
|
import org.testng.annotations.Test;
|
|
|
|
import com.google.common.io.Resources;
|
|
import com.google.inject.Guice;
|
|
import com.google.inject.Injector;
|
|
import monasca.api.ApiConfig;
|
|
import monasca.api.MonApiModule;
|
|
import monasca.api.app.command.CreateNotificationMethodCommand;
|
|
import monasca.api.domain.exception.EntityNotFoundException;
|
|
import monasca.api.domain.model.notificationmethod.NotificationMethod;
|
|
import monasca.api.domain.model.notificationmethod.NotificationMethodRepo;
|
|
import monasca.api.infrastructure.persistence.PersistUtils;
|
|
import monasca.api.infrastructure.persistence.mysql.NotificationMethodMySqlRepoImpl;
|
|
import monasca.api.resource.AbstractMonApiResourceTest;
|
|
import monasca.api.resource.NotificationMethodResource;
|
|
import com.sun.jersey.api.client.ClientResponse;
|
|
|
|
@Test(groups = "integration")
|
|
public class NotificationMethodIntegrationTest extends AbstractMonApiResourceTest {
|
|
private static final String TENANT_ID = "notification-method-test";
|
|
private DBI db;
|
|
private NotificationMethod notificationMethod;
|
|
private NotificationMethodRepo repo;
|
|
private ApiConfig config;
|
|
|
|
@Override
|
|
protected void setupResources() throws Exception {
|
|
super.setupResources();
|
|
Handle handle = db.open();
|
|
handle.execute("truncate table notification_method");
|
|
handle
|
|
.execute("insert into notification_method (id, tenant_id, name, type, address, created_at, updated_at) values ('29387234', 'notification-method-test', 'MyEmaila', 'EMAIL', 'a@b', NOW(), NOW())");
|
|
db.close(handle);
|
|
repo = new NotificationMethodMySqlRepoImpl(db, new PersistUtils());
|
|
addResources(new NotificationMethodResource(config, repo, new PersistUtils()));
|
|
}
|
|
|
|
@BeforeTest
|
|
protected void beforeTest() throws Exception {
|
|
ApiConfig config = getConfiguration("config-test.yml", ApiConfig.class);
|
|
Injector injector = Guice.createInjector(new MonApiModule(environment, config));
|
|
db = injector.getInstance(DBI.class);
|
|
Handle handle = db.open();
|
|
handle.execute(Resources.toString(
|
|
NotificationMethodMySqlRepoImpl.class.getResource("notification_method.sql"),
|
|
Charset.defaultCharset()));
|
|
handle.close();
|
|
|
|
// Fixtures
|
|
notificationMethod =
|
|
new NotificationMethod("123", "Joe's Email", "EMAIL", "a@b", 0);
|
|
}
|
|
|
|
public void shouldCreate() throws Exception {
|
|
ClientResponse response =
|
|
client()
|
|
.resource("/v2.0/notification-methods")
|
|
.header("X-Tenant-Id", TENANT_ID)
|
|
.type(MediaType.APPLICATION_JSON)
|
|
.post(
|
|
ClientResponse.class,
|
|
new CreateNotificationMethodCommand(notificationMethod.getName(),
|
|
notificationMethod.getType(), notificationMethod.getAddress(), "0"));
|
|
NotificationMethod newNotificationMethod = response.getEntity(NotificationMethod.class);
|
|
String location = response.getHeaders().get("Location").get(0);
|
|
|
|
assertEquals(response.getStatus(), 201);
|
|
assertEquals(location, "/v2.0/notification-methods/" + newNotificationMethod.getId());
|
|
assertEquals(newNotificationMethod.getName(), notificationMethod.getName());
|
|
assertEquals(newNotificationMethod.getAddress(), notificationMethod.getAddress());
|
|
assertEquals(repo.findById(TENANT_ID, newNotificationMethod.getId()), newNotificationMethod);
|
|
}
|
|
|
|
public void shouldConflict() throws Exception {
|
|
ClientResponse response =
|
|
client()
|
|
.resource("/v2.0/notification-methods")
|
|
.header("X-Tenant-Id", TENANT_ID)
|
|
.type(MediaType.APPLICATION_JSON)
|
|
.post(ClientResponse.class,
|
|
new CreateNotificationMethodCommand("MyEmail", "EMAIL", "a@b", "0"));
|
|
|
|
assertEquals(response.getStatus(), 409);
|
|
}
|
|
|
|
public void shouldDelete() {
|
|
NotificationMethod newMethod =
|
|
repo.create(TENANT_ID, notificationMethod.getName(), notificationMethod.getType(),
|
|
notificationMethod.getAddress(), 0);
|
|
assertNotNull(repo.findById(TENANT_ID, newMethod.getId()));
|
|
|
|
ClientResponse response =
|
|
client().resource("/v2.0/notification-methods/" + newMethod.getId())
|
|
.header("X-Tenant-Id", TENANT_ID).delete(ClientResponse.class);
|
|
assertEquals(response.getStatus(), 204);
|
|
|
|
try {
|
|
assertNull(repo.findById(TENANT_ID, newMethod.getId()));
|
|
fail();
|
|
} catch (EntityNotFoundException expected) {
|
|
}
|
|
}
|
|
}
|