public void Test_Empty_Storage_After_Creation()
    {
        // create storage
        FileCacheStorage storage = new FileCacheStorage(_curDir, _curFile, _fileSystemMock.Object, _serializerMock.Object);

        // check new storage: should not have FileCacheEntry and version
        Assert.AreEqual(false, storage.Has("1"));
        Assert.AreEqual(null, storage.Version);
        Assert.AreEqual(null, storage.Get("2"));
        Assert.AreEqual(0, storage.CacheEntries.Count);

        try
        {
            // should not have exception, if delete FileCacheEntry in empty storage
            storage.Delete("3");
        }
        catch (Exception ex)
        {
            Assert.Fail("No exception should be thrown in Delete() for empty storage, but got " + ex.Message);
        }

        // check storage version after saving storage to file
        storage.SaveCacheStorageFile();
        Assert.AreEqual("1.0", storage.Version);
    }
    public void Store_And_verify_multiple_entries()
    {
        // create storage and fill it with 3 FileCacheEntry
        FileCacheStorage storage = createAndFillStorage(3);

        // verify all FileCacheEntry
        Assert.AreEqual(true, storage.Has("1"));
        Assert.AreEqual(true, storage.Has("2"));
        Assert.AreEqual(true, storage.Has("3"));

        storage.SaveCacheStorageFile();
        Assert.AreEqual(3, storage.CacheEntries.Count);

        // current version have to be set after SaveCacheStorageFile
        Assert.AreNotEqual(null, storage.Version);
    }
    public void Test_Store_Same_entry_With_Versions()
    {
        // create storage
        FileCacheStorage storage = new FileCacheStorage(_curDir, _curFile, _fileSystemMock.Object, _serializerMock.Object);

        string id       = "1";
        string version1 = "1.1";
        string version2 = "2.0";

        // store the data with id and version1
        storage.Set(_data, id, version1);

        // store the data with id and version2
        storage.Set(_data, id, version2);

        // check version of the FileCacheEntry with id in the storage
        Assert.AreEqual(true, storage.Has(id));
        Assert.AreEqual(true, storage.MatchesVersion(id, version2));
        Assert.AreEqual(false, storage.MatchesVersion(id, version1));

        string version3 = "3.0";

        // store the data with id and version3
        storage.Set(_data, id, version3);

        // check version of the FileCacheEntry with id in the storage
        Assert.AreEqual(true, storage.MatchesVersion(id, version3));
    }
    public void Store_And_delete_multiple_entry()
    {
        // create storage and fill it with 5 FileCacheEntry
        FileCacheStorage storage = createAndFillStorage(5);

        // verify all FileCacheEntry
        Assert.AreEqual(true, storage.Has("1"));
        Assert.AreEqual(true, storage.Has("2"));
        Assert.AreEqual(true, storage.Has("3"));
        Assert.AreEqual(true, storage.Has("4"));
        Assert.AreEqual(true, storage.Has("5"));

        storage.SaveCacheStorageFile();
        // check FileCacheEntry count
        Assert.AreEqual(5, storage.CacheEntries.Count);

        // delete FileCacheEntry with id = "2"
        storage.Delete("2");
        Assert.AreEqual(null, storage.Get("2"));
        Assert.AreNotEqual(null, storage.Get("3"));
        Assert.AreEqual(false, storage.Has("2"));


        storage.SaveCacheStorageFile();
        // check FileCacheEntry count
        Assert.AreEqual(4, storage.CacheEntries.Count);

        // delete all and check
        storage.DeleteAll();
        storage.SaveCacheStorageFile();

        // check FileCacheEntry count
        Assert.AreEqual(0, storage.CacheEntries.Count);
    }