#include #include #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", "stopped", -1, -1}); 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", "stopped", -1, -1}); 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", "stopped", -1, -1}); shadeRepository.upsert(Shade{0xABCD, "test_shade", "Test Shade", "stopped", -1, -1}); 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", "stopped", -1, -1}); auto shade1 = shadeRepository.findById(0xABCD); TEST_ASSERT_EQUAL_HEX16(0xABCD, shade1->ID); shadeRepository.upsert(Shade{0x1234, "test_shade", "Test Shade", "stopped", -1, -1}); 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", "stopped", -1, -1}); 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", "stopped", -1, -1}); 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", "stopped", -1, -1}); 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", "stopped", -1, -1}); shadeRepository.upsert(Shade{0x1234, "test_shade", "Updated Test Shade", "stopped", -1, -1}); 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(); }