package io.budgetapp.resource;
import io.budgetapp.BudgetApplication;
import io.budgetapp.configuration.AppConfiguration;
import io.budgetapp.model.Category;
import io.budgetapp.model.CategoryType;
import io.budgetapp.model.form.budget.AddBudgetForm;
import io.dropwizard.testing.junit.DropwizardAppRule;
import org.junit.Assert;
import org.junit.ClassRule;
import org.junit.Test;
import javax.ws.rs.core.Response;
/**
*
*/
public class CategoryResourceIT extends ResourceIT {
@ClassRule
public static final DropwizardAppRule<AppConfiguration> RULE =
new DropwizardAppRule<>(BudgetApplication.class, resourceFilePath("config-test.yml"));
@Override
protected int getPort() {
return RULE.getLocalPort();
}
@Test
public void shouldAbleCreateCategory() {
// given
Category category = new Category();
category.setName(randomAlphabets());
category.setType(CategoryType.EXPENDITURE);
// when
Response response = post(ResourceURL.CATEGORY, category);
// then
assertCreated(response);
Assert.assertNotNull(response.getLocation());
}
@Test
public void shouldAbleFindValidCategory() {
// given
Category category = new Category();
category.setName(randomAlphabets());
category.setType(CategoryType.EXPENDITURE);
// when
Response response = post(ResourceURL.CATEGORY, category);
// then
Response newReponse = get(response.getLocation().getPath());
assertOk(newReponse);
}
@Test
public void shouldNotAbleDeleteCategoryWithChild() {
// given
Category category = new Category();
category.setName(randomAlphabets());
category.setType(CategoryType.EXPENDITURE);
// when
Response response = post(ResourceURL.CATEGORY, category);
AddBudgetForm budget = new AddBudgetForm();
budget.setName(randomAlphabets());
budget.setCategoryId(identityResponse(response).getId());
post(ResourceURL.BUDGET, budget);
// then
Response newReponse = delete(response.getLocation().getPath());
assertBadRequest(newReponse);
}
}