180 lines
5.4 KiB
C++
180 lines
5.4 KiB
C++
#include "gtest/gtest.h"
|
|
#include "Storage.hpp"
|
|
|
|
TEST(StorageTest, test_construct_with_type) {
|
|
Storage storage = Storage(StorageType::CAKE);
|
|
|
|
ASSERT_EQ(StorageType::CAKE, storage.getType());
|
|
ASSERT_EQ(0, storage.getAmount());
|
|
ASSERT_EQ(10, storage.getCapacity());
|
|
}
|
|
|
|
TEST(StorageTest, test_construct_with_type_and_capacity) {
|
|
Storage storage = Storage(StorageType::CAKE, 15);
|
|
|
|
ASSERT_EQ(StorageType::CAKE, storage.getType());
|
|
ASSERT_EQ(0, storage.getAmount());
|
|
ASSERT_EQ(15, storage.getCapacity());
|
|
}
|
|
|
|
TEST(StorageTest, test_add_snack_with_name) {
|
|
Storage storage = Storage(StorageType::CANDY, 5);
|
|
storage.add("KitKat");
|
|
|
|
ASSERT_EQ(1, storage.getSnacks().size());
|
|
ASSERT_EQ(1, storage.getAmount());
|
|
ASSERT_EQ(1, storage.getSnacks()[0].getAmount());
|
|
ASSERT_EQ("KitKat", storage.getSnacks()[0].getName());
|
|
}
|
|
|
|
TEST(StorageTest, test_add_snack_with_name_twice) {
|
|
Storage storage = Storage(StorageType::CANDY, 5);
|
|
storage.add("KitKat");
|
|
storage.add("KitKat");
|
|
|
|
ASSERT_EQ(1, storage.getSnacks().size());
|
|
ASSERT_EQ(2, storage.getAmount());
|
|
ASSERT_EQ(2, storage.getSnacks()[0].getAmount());
|
|
ASSERT_EQ("KitKat", storage.getSnacks()[0].getName());
|
|
}
|
|
|
|
TEST(StorageTest, test_add_snack_overflow_with_name) {
|
|
Storage storage = Storage(StorageType::CAKE, 2);
|
|
storage.add("CheeseCake", 2);
|
|
|
|
ASSERT_THROW(storage.add("Brownie"), std::invalid_argument);
|
|
}
|
|
|
|
TEST(StorageTest, test_add_snack_with_name_and_amount) {
|
|
Storage storage = Storage(StorageType::CANDY, 5);
|
|
storage.add("Oreo", 2);
|
|
|
|
ASSERT_EQ(1, storage.getSnacks().size());
|
|
ASSERT_EQ(2, storage.getAmount());
|
|
ASSERT_EQ(2, storage.getSnacks()[0].getAmount());
|
|
ASSERT_EQ("Oreo", storage.getSnacks()[0].getName());
|
|
}
|
|
|
|
TEST(StorageTest, test_add_snack_with_name_and_amount_twice) {
|
|
Storage storage = Storage(StorageType::CANDY, 5);
|
|
storage.add("Oreo", 2);
|
|
storage.add("Oreo", 2);
|
|
|
|
ASSERT_EQ(1, storage.getSnacks().size());
|
|
ASSERT_EQ(4, storage.getAmount());
|
|
ASSERT_EQ(4, storage.getSnacks()[0].getAmount());
|
|
ASSERT_EQ("Oreo", storage.getSnacks()[0].getName());
|
|
}
|
|
|
|
TEST(StorageTest, test_add_snack_overflow_with_name_and_amount) {
|
|
Storage storage = Storage(StorageType::CAKE, 2);
|
|
|
|
ASSERT_THROW(storage.add("Brownie", 3), std::invalid_argument);
|
|
}
|
|
|
|
TEST(StorageTest, test_eat_snack_with_name_and_amount) {
|
|
Storage storage = Storage(StorageType::COOKIES, 5);
|
|
storage.add("Oreo", 3);
|
|
|
|
storage.eat("Oreo", 2);
|
|
ASSERT_EQ(1, storage.getSnacks()[0].getAmount());
|
|
}
|
|
|
|
TEST(StorageTest, test_eat_all_snack_with_name_and_amount) {
|
|
Storage storage = Storage(StorageType::COOKIES, 5);
|
|
storage.add("Oreo", 3);
|
|
|
|
storage.eat("Oreo", 3);
|
|
ASSERT_TRUE(storage.getSnacks().empty());
|
|
}
|
|
|
|
TEST(StorageTest, test_eat_snack_overflow_with_name_and_amount) {
|
|
Storage storage = Storage(StorageType::COOKIES, 5);
|
|
storage.add("Oreo", 3);
|
|
|
|
ASSERT_THROW(storage.eat("Oreo", 6), std::invalid_argument);
|
|
}
|
|
|
|
TEST(StorageTest, test_eat_snack_not_exist_with_name_and_amount) {
|
|
Storage storage = Storage(StorageType::COOKIES, 5);
|
|
|
|
ASSERT_THROW(storage.eat("Oreo", 6), std::invalid_argument);
|
|
}
|
|
|
|
TEST(StorageTest, test_eat_first_with_amount) {
|
|
Storage storage = Storage(StorageType::OTHER, 10);
|
|
storage.add("Mars", 3);
|
|
storage.add("Twix", 4);
|
|
|
|
storage.eatFirst(2);
|
|
ASSERT_EQ(1, storage.getSnacks().front().getAmount());
|
|
ASSERT_EQ(4, storage.getSnacks().back().getAmount());
|
|
}
|
|
|
|
TEST(StorageTest, test_eat_all_first_with_amount) {
|
|
Storage storage = Storage(StorageType::OTHER, 10);
|
|
storage.add("Mars", 3);
|
|
storage.add("Twix", 4);
|
|
|
|
storage.eatFirst(3);
|
|
ASSERT_EQ(1, storage.getSnacks().size());
|
|
ASSERT_EQ("Twix", storage.getSnacks().front().getName());
|
|
ASSERT_EQ(4, storage.getSnacks().front().getAmount());
|
|
}
|
|
|
|
TEST(StorageTest, test_eat_last_with_amount) {
|
|
Storage storage = Storage(StorageType::OTHER, 10);
|
|
storage.add("Mars", 3);
|
|
storage.add("Twix", 4);
|
|
|
|
storage.eatLast(3);
|
|
ASSERT_EQ(3, storage.getSnacks().front().getAmount());
|
|
ASSERT_EQ(1, storage.getSnacks().back().getAmount());
|
|
}
|
|
|
|
TEST(StorageTest, test_eat_all_last_with_amount) {
|
|
Storage storage = Storage(StorageType::OTHER, 10);
|
|
storage.add("Mars", 3);
|
|
storage.add("Twix", 4);
|
|
|
|
storage.eatLast(4);
|
|
ASSERT_EQ(1, storage.getSnacks().size());
|
|
ASSERT_EQ("Mars", storage.getSnacks().back().getName());
|
|
ASSERT_EQ(3, storage.getSnacks().back().getAmount());
|
|
}
|
|
|
|
TEST(StorageTest, test_sort_snacks_by_amount) {
|
|
Storage storage = Storage(StorageType::CANDY, 15);
|
|
storage.add("Zebra", 5);
|
|
storage.add("Apple", 2);
|
|
storage.add("Mango", 7);
|
|
|
|
storage.sortBySnackName();
|
|
ASSERT_EQ("Apple", storage.getSnacks()[0].getName());
|
|
ASSERT_EQ("Mango", storage.getSnacks()[1].getName());
|
|
ASSERT_EQ("Zebra", storage.getSnacks()[2].getName());
|
|
|
|
}
|
|
|
|
TEST(StorageTest, test_sort_snacks_by_Name) {
|
|
Storage storage = Storage(StorageType::CANDY, 15);
|
|
storage.add("Zebra", 5);
|
|
storage.add("Apple", 2);
|
|
storage.add("Mango", 7);
|
|
|
|
|
|
storage.sortByAmount();
|
|
ASSERT_EQ(2, storage.getSnacks()[0].getAmount());
|
|
ASSERT_EQ(5, storage.getSnacks()[1].getAmount());
|
|
ASSERT_EQ(7, storage.getSnacks()[2].getAmount());
|
|
}
|
|
|
|
TEST(StorageTest, test_clear_snacks) {
|
|
Storage storage = Storage(StorageType::CANDY, 10);
|
|
storage.add("Candy", 3);
|
|
storage.add("Cookie", 2);
|
|
|
|
storage.clear();
|
|
ASSERT_TRUE(storage.getSnacks().empty());
|
|
}
|