Files
Hotdog/test/test_shade_repository/test_shade_repository.cpp

158 lines
4.5 KiB
C++

#include <unity.h>
#include <Arduino.h>
#include "ShadeRepository.h"
void setUp()
{
}
void tearDown()
{
}
void test_shade_is_found_with_id()
{
ShadeRepository shadeRepository = ShadeRepository();
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
auto shade = shadeRepository.findById(0xABCD);
TEST_ASSERT_NOT_NULL_MESSAGE(shade, "shade should not be null");
TEST_ASSERT_EQUAL_STRING("Test Shade", shade->friendlyName.c_str());
TEST_ASSERT_EQUAL_HEX16(0xABCD, shade->ID);
TEST_ASSERT_EQUAL_STRING("test_shade", shade->key.c_str());
}
void test_shade_is_found_with_key()
{
ShadeRepository shadeRepository = ShadeRepository();
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
auto shade = shadeRepository.findByKey("test_shade");
TEST_ASSERT_NOT_NULL_MESSAGE(shade, "shade should not be null");
TEST_ASSERT_EQUAL_STRING("Test Shade", shade->friendlyName.c_str());
TEST_ASSERT_EQUAL_HEX16(0xABCD, shade->ID);
TEST_ASSERT_EQUAL_STRING("test_shade", shade->key.c_str());
}
void test_adding_shade_twice_only_added_once()
{
ShadeRepository shadeRepository = ShadeRepository();
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
int count = 0;
for (auto iter = shadeRepository.begin(); iter != shadeRepository.end(); iter++) {
count++;
}
TEST_ASSERT_EQUAL_INT(1, count);
}
void test_updating_shade_id()
{
ShadeRepository shadeRepository = ShadeRepository();
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
auto shade1 = shadeRepository.findById(0xABCD);
TEST_ASSERT_EQUAL_HEX16(0xABCD, shade1->ID);
shadeRepository.upsert(Shade{0x1234, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
auto shade2 = shadeRepository.findById(0x1234);
auto shade3 = shadeRepository.findById(0xABCD);
TEST_ASSERT_EQUAL_HEX16(0x1234, shade2->ID);
TEST_ASSERT_EQUAL_HEX16(0x1234, shade1->ID);
TEST_ASSERT_NULL(shade3);
}
void test_updating_shade_friendly_name()
{
ShadeRepository shadeRepository = ShadeRepository();
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
auto shade1 = shadeRepository.findByKey("test_shade");
TEST_ASSERT_EQUAL_STRING("Test Shade", shade1->friendlyName.c_str());
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Updated Test Shade", -1, -1, 0, 0, nullptr});
auto shade2 = shadeRepository.findByKey("test_shade");
TEST_ASSERT_EQUAL_STRING("Updated Test Shade", shade2->friendlyName.c_str());
TEST_ASSERT_EQUAL_STRING("Updated Test Shade", shade1->friendlyName.c_str());
}
void test_shade_added_callback()
{
int callbackInvokedCount = 0;
ShadeRepository shadeRepository = ShadeRepository();
shadeRepository.addShadeAddedCallback([&] (Shade& shade) {
callbackInvokedCount++;
TEST_ASSERT_EQUAL_STRING("Test Shade", shade.friendlyName.c_str());
TEST_ASSERT_EQUAL_HEX16(0xABCD, shade.ID);
TEST_ASSERT_EQUAL_STRING("test_shade", shade.key.c_str());
});
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
TEST_ASSERT_EQUAL_INT(1, callbackInvokedCount);
}
void test_shade_changed_callback()
{
int callbackInvokedCount = 0;
ShadeRepository shadeRepository = ShadeRepository();
shadeRepository.addShadeChangedCallback([&] (Shade& shade) {
callbackInvokedCount++;
TEST_ASSERT_EQUAL_STRING("Updated Test Shade", shade.friendlyName.c_str());
TEST_ASSERT_EQUAL_HEX16(0x1234, shade.ID);
TEST_ASSERT_EQUAL_STRING("test_shade", shade.key.c_str());
});
shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", -1, -1, 0, 0, nullptr});
shadeRepository.upsert(Shade{0x1234, "test_shade", "Updated Test Shade", -1, -1, 0, 0, nullptr});
TEST_ASSERT_EQUAL_INT(1, callbackInvokedCount);
}
int runUnityTests(void)
{
UNITY_BEGIN();
RUN_TEST(test_shade_is_found_with_id);
RUN_TEST(test_shade_is_found_with_key);
RUN_TEST(test_adding_shade_twice_only_added_once);
RUN_TEST(test_updating_shade_id);
RUN_TEST(test_updating_shade_friendly_name);
RUN_TEST(test_shade_added_callback);
RUN_TEST(test_shade_changed_callback);
return UNITY_END();
}
/**
* For Arduino framework
*/
void setup()
{
// Wait ~2 seconds before the Unity test runner
// establishes connection with a board Serial interface
delay(2000);
runUnityTests();
}
void loop() {}
int main(void)
{
return runUnityTests();
}