#region license // This file is part of Vocaluxe. // // Vocaluxe is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Vocaluxe is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Vocaluxe. If not, see . #endregion using System; using System.IO; using System.Linq; using NUnit.Framework; using VocaluxeWeb.Contracts; using VocaluxeWeb.Remote; using VocaluxeWeb.Services; namespace Tests.VocaluxeWeb { [TestFixture] public class CWebSettingsTest { private string _Path; [SetUp] public void SetUp() { _Path = Path.Combine(Path.GetTempPath(), "VocaluxeWebTest_" + Guid.NewGuid().ToString("N"), "WebSettings.json"); } [TearDown] public void TearDown() { var directory = Path.GetDirectoryName(_Path); if (Directory.Exists(directory)) { Directory.Delete(directory, true); } } [Test] public void TestAdminHasAllPermissions() { var settings = new CWebSettings(); settings.GuestPermissions.Clear(); settings.PlayerPermissions.Clear(); var all = Enum.GetValues(typeof(EPermission)).Cast().ToList(); Assert.That(settings.GetPermissions(ERemoteRole.Admin), Is.EquivalentTo(all)); Assert.That(settings.GetPermissions(ERemoteRole.Guest), Is.Empty); Assert.That(settings.GetPermissions(ERemoteRole.Player), Is.Empty); } [Test] public void TestDefaults() { var settings = new CWebSettings(); Assert.That(settings.GetPermissions(ERemoteRole.Guest), Is.EquivalentTo(new[] { EPermission.AddToQueue })); Assert.That(settings.GetPermissions(ERemoteRole.Player), Does.Contain(EPermission.AddToQueue)); Assert.That(settings.GetPermissions(ERemoteRole.Player), Does.Not.Contain(EPermission.EditAllProfiles)); } [Test] public void TestStoreSavesAndLoads() { var store = new CWebSettingsStore(_Path); store.Update(s => { s.AllowProfileCreation = false; s.QueuePlaylistName = "Party queue"; s.GuestPermissions.Add(EPermission.UseKeyboard); }); var loaded = new CWebSettingsStore(_Path).Current; Assert.That(loaded.AllowProfileCreation, Is.False); Assert.That(loaded.QueuePlaylistName, Is.EqualTo("Party queue")); Assert.That(loaded.GetPermissions(ERemoteRole.Guest), Does.Contain(EPermission.UseKeyboard)); } [Test] public void TestCurrentIsACopy() { var store = new CWebSettingsStore(_Path); store.Current.GuestPermissions.Add(EPermission.DeletePlaylists); Assert.That(store.Current.GuestPermissions, Does.Not.Contain(EPermission.DeletePlaylists)); } [Test] public void TestBrokenFile() { Directory.CreateDirectory(Path.GetDirectoryName(_Path)); File.WriteAllText(_Path, "{ broken"); var store = new CWebSettingsStore(_Path); Assert.That(store.Current.QueuePlaylistName, Is.EqualTo("WebApp Queue")); } [Test] public void TestFileWithRemovedSettings() { Directory.CreateDirectory(Path.GetDirectoryName(_Path)); File.WriteAllText(_Path, "{ \"RequireJoinToken\": true, \"JoinToken\": \"abc\", \"QueuePlaylistName\": \"Party\" }"); Assert.That(new CWebSettingsStore(_Path).Current.QueuePlaylistName, Is.EqualTo("Party")); } } }