/*
* Copyright (c) 2023 Proton AG
*
* This file is part of ProtonVPN.
*
* ProtonVPN 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.
*
* ProtonVPN 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 ProtonVPN. If not, see .
*/
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Newtonsoft.Json;
using NSubstitute;
using ProtonVPN.Logging.Contracts;
using ProtonVPN.Update.Releases;
using ProtonVPN.Update.Responses;
namespace ProtonVPN.Update.Tests.Releases;
[TestClass]
public class ReleasesTest
{
private ILogger _logger;
[TestInitialize]
public void TestInitialize()
{
_logger = Substitute.For();
}
[TestCleanup]
public void TestCleanup()
{
_logger = null;
}
[TestMethod]
public void Releases_ShouldImplement_IEnumerable()
{
Update.Releases.Releases releases = new(_logger, [], new Version(), "");
releases.Should().BeAssignableTo>();
}
[TestMethod]
public void Releases_Version_ShouldBe_FromReleases()
{
string json = File.ReadAllText(@"TestData\windows-releases.json");
ReleasesResponse releasesResponse = JsonConvert.DeserializeObject(json);
List expected = releasesResponse.Releases.Select(r => Version.Parse(r.Version)).ToList();
Update.Releases.Releases releases = new(_logger, releasesResponse.Releases, new Version(), "");
IEnumerable result = releases.Select(r => r.Version);
result.Should()
.OnlyHaveUniqueItems().And
.Contain(expected);
}
[TestMethod]
public void Releases_EarlyAccess_ShouldBeTrue_ForEarlyAccess()
{
string json = File.ReadAllText(@"TestData\windows-releases.json");
ReleasesResponse releasesResponse = JsonConvert.DeserializeObject(json);
Update.Releases.Releases releases = new(_logger, releasesResponse.Releases, new Version(), "EarlyAccess");
releases.Where(r => r.IsEarlyAccess).Should().HaveCount(2);
}
[TestMethod]
public void Releases_New_ShouldBeTrue_ForNewReleases()
{
string json = File.ReadAllText(@"TestData\windows-releases.json");
ReleasesResponse releasesResponse = JsonConvert.DeserializeObject(json);
Update.Releases.Releases releases = new(_logger, releasesResponse.Releases, Version.Parse("1.5.0"), "");
releases.Where(r => r.IsNew).Should().HaveCount(3);
}
[TestMethod]
public void Releases_ShouldContainOnlyValidVersions()
{
string json = File.ReadAllText(@"TestData\windows-releases-invalid-versions.json");
ReleasesResponse releasesResponse = JsonConvert.DeserializeObject(json);
Update.Releases.Releases releases = new(_logger, releasesResponse.Releases, Version.Parse("1.5.0"), "");
releases.Should().HaveCount(2);
releases.Should().Contain(r => r.Version == new Version("1.5.0"));
releases.Should().Contain(r => r.Version == new Version("1.5.1"));
}
}