Skip to content

Instantly share code, notes, and snippets.

@trikitrok
Forked from franreyes/ArgentRoseStoreTest.java
Last active October 11, 2024 19:32
Show Gist options
  • Save trikitrok/f1c8eae79cc2adf6c371b6deabcd4cff to your computer and use it in GitHub Desktop.
Save trikitrok/f1c8eae79cc2adf6c371b6deabcd4cff to your computer and use it in GitHub Desktop.
Argent Rose tests with 100% coverage but some mutants surviving
package com.argentrose;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class ArgentRoseStoreTest {
public static final int MIN_QUALITY = 0;
public static final int MAX_QUALITY = 50;
public static final int SELLIN_LAST_DAY = 0;
public static final int EXPIRED = -1;
private ArgentRoseStore store;
@BeforeEach
void setUp() {
store = new ArgentRoseStore();
}
@Test
public void regular_product_decrease_quality_by_two() {
final Product regular = createRegular(5, 10);
store.add(regular);
store.update();
assertEquals(createRegular(4, 8), regular);
}
@Test
public void expired_regular_product_decrease_quality_twice_as_fast() {
final Product regular = createRegular(SELLIN_LAST_DAY, 10);
store.add(regular);
store.update();
assertEquals(createRegular(EXPIRED, 6), regular);
}
@Test
public void aged_brie_increase_quality_by_one() {
final Product agedBrie = createAgedBrie(3, 10);
store.add(agedBrie);
store.update();
assertEquals(createAgedBrie(2, 11), agedBrie);
}
@Test
public void expired_aged_brie_increase_quality_twice_as_fast() {
final Product agedBrie = createAgedBrie(SELLIN_LAST_DAY, 10);
store.add(agedBrie);
store.update();
assertEquals(createAgedBrie(EXPIRED, 12), agedBrie);
}
@Test
public void lanzarote_wine_increase_quality_by_one() {
final Product lanzaroteWine = createLanzaroteWine(3, 10);
store.add(lanzaroteWine);
store.update();
assertEquals(createLanzaroteWine(2, 12), lanzaroteWine);
}
@Test
public void expired_lanzarote_wine_increase_quality_twice_as_fast() {
final Product lanzaroteWine = createLanzaroteWine(SELLIN_LAST_DAY, 10);
store.add(lanzaroteWine);
store.update();
assertEquals(createLanzaroteWine(EXPIRED, 14), lanzaroteWine);
}
@Test
public void theatre_passes_increase_quality_by_one_when_sellIn_is_far_away() {
final Product theatrePasses = createTheatrePasses(9, 12);
store.add(theatrePasses);
store.update();
assertEquals(createTheatrePasses(8, 13), theatrePasses);
}
@Test
public void theatre_passes_increase_quality_by_three_when_sellIn_is_near() {
final Product theatrePasses = createTheatrePasses(3, 12);
store.add(theatrePasses);
store.update();
assertEquals(createTheatrePasses(2, 15), theatrePasses);
}
@Test
public void expired_theatre_passes_drop_quality_to_zero() {
final Product theatrePasses = createTheatrePasses(SELLIN_LAST_DAY, 5);
store.add(theatrePasses);
store.update();
assertEquals(createTheatrePasses(EXPIRED, MIN_QUALITY), theatrePasses);
}
@Test
public void regular_product_quality_is_not_below_the_min_quality() {
final Product regular = createRegular(2, 1);
store.add(regular);
store.update();
assertEquals(createRegular(1, MIN_QUALITY), regular);
}
@Test
public void expired_regular_product_quality_is_not_below_the_min_quality() {
final Product regular = createRegular(SELLIN_LAST_DAY, 3);
store.add(regular);
store.update();
assertEquals(createRegular(EXPIRED, MIN_QUALITY), regular);
}
@Test
public void aged_brie_quality_never_increases_over_the_maximum_quality() {
final Product agedBrie = createAgedBrie(3, MAX_QUALITY);
store.add(agedBrie);
store.update();
assertEquals(createAgedBrie(2, MAX_QUALITY), agedBrie);
}
@Test
public void expired_aged_brie_quality_never_increases_over_the_maximum_quality() {
final Product agedBrie = createAgedBrie(SELLIN_LAST_DAY, MAX_QUALITY);
store.add(agedBrie);
store.update();
assertEquals(createAgedBrie(EXPIRED, MAX_QUALITY), agedBrie);
}
@Test
public void lanzarote_wine_quality_never_increases_over_the_maximum_quality() {
final Product lanzaroteWine = createLanzaroteWine(3, MAX_QUALITY);
store.add(lanzaroteWine);
store.update();
assertEquals(createLanzaroteWine(2, MAX_QUALITY), lanzaroteWine);
}
@Test
public void expired_lanzarote_wine_quality_never_increases_over_the_maximum_quality() {
final Product lanzaroteWine = createLanzaroteWine(SELLIN_LAST_DAY, MAX_QUALITY);
store.add(lanzaroteWine);
store.update();
assertEquals(createLanzaroteWine(EXPIRED, MAX_QUALITY), lanzaroteWine);
}
@Test
public void theatre_pass_quality_when_sellIn_is_far_away_never_increases_over_the_maximum_quality() {
final Product theatrePasses = createTheatrePasses(2, MAX_QUALITY);
store.add(theatrePasses);
store.update();
assertEquals(createTheatrePasses(1, MAX_QUALITY), theatrePasses);
}
@Test
public void theatre_pass_quality_when_sellIn_is_near_never_increases_over_the_maximum_quality() {
final Product theatrePasses = createTheatrePasses(2, 48);
store.add(theatrePasses);
store.update();
assertEquals(createTheatrePasses(1, MAX_QUALITY), theatrePasses);
}
@Test
public void update_multiple_products() {
final Product agedBrie = createAgedBrie(3, 5);
final Product regular = createRegular(3, 5);
store.add(agedBrie, regular);
store.update();
assertEquals(createAgedBrie(2, 6), agedBrie);
assertEquals(createRegular(2, 3), regular);
}
private static Product createRegular(int sellIn, int quality) {
return new Product("Regular", sellIn, quality);
}
private static Product createAgedBrie(int sellIn, int quality) {
return new Product("Aged Brie", sellIn, quality);
}
private static Product createLanzaroteWine(int sellIn, int quality) {
return new Product("Lanzarote Wine", sellIn, quality);
}
private static Product createTheatrePasses(int sellIn, int quality) {
return new Product("Theatre Passes", sellIn, quality);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment