public void LoadWithCallback_TestMethod()
        {
            var cacheDataController = new CacheDataController();
            var mockCacheData       = new Mock <ICacheData>();

            mockCacheData.SetupProperty(m => m.IsCached, false);
            mockCacheData.Setup(m => m.Load(false)).Callback(() => mockCacheData.Object.IsCached = true);
            var callbackExecuted = false;

            cacheDataController.Initialize(mockCacheData.Object);
            cacheDataController.LoadWithCallback(() => { callbackExecuted = true; });

            // Wait for a maximum of 1 second for the callback to be called
            for (int i = 0; i < 10; i++)
            {
                if (callbackExecuted)
                {
                    break;
                }
                Thread.Sleep(100);
            }

            if (!callbackExecuted)
            {
                Assert.Fail("Boolean value was not set to true");
            }

            mockCacheData.Verify(m => m.Load(false), Times.Once());
            Assert.IsTrue(cacheDataController.IsCached, "IsCached should be true after load");
        }
        public void Initialize_TestMethod()
        {
            var cacheDataController = new CacheDataController();
            var mockCacheData       = new Mock <ICacheData>();

            cacheDataController.Initialize(mockCacheData.Object);

            Assert.AreSame(mockCacheData.Object, cacheDataController.Data, "CacheData should be set");
        }
        public void LoadTwice_TestMethod()
        {
            var cacheDataController = new CacheDataController();
            var mockCacheData       = new Mock <ICacheData>();

            mockCacheData.SetupProperty(m => m.IsCached, false);
            mockCacheData.Setup(m => m.Load(false)).Callback(() => mockCacheData.Object.IsCached = true);

            cacheDataController.Initialize(mockCacheData.Object);
            cacheDataController.Load();
            cacheDataController.Load();

            mockCacheData.Verify(m => m.Load(false), Times.Once());
        }