// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import { CommonTest } from "./CommonTest.t.sol";
import { Semver } from "../src/universal/Semver.sol";
import { Proxy } from "../src/universal/Proxy.sol";

/// @notice Test the Semver contract that is used for semantic versioning
///         of various contracts.
contract Semver_Test is CommonTest {
    /// @notice Global semver contract deployed in setUp. This is used in
    ///         the test cases.
    Semver semver;

    /// @notice Deploy a Semver contract
    function setUp() public virtual override {
        semver = new Semver(7, 8, 0);
    }

    /// @notice Test the version getter
    function test_version_succeeds() external {
        assertEq(semver.version(), "7.8.0");
    }

    /// @notice Since the versions are all immutable, they should
    ///         be able to be accessed from behind a proxy without needing
    ///         to initialize the contract.
    function test_behindProxy_succeeds() external {
        Proxy proxy = new Proxy(alice);
        vm.prank(alice);
        proxy.upgradeTo(address(semver));

        assertEq(Semver(address(proxy)).version(), "7.8.0");
    }
}
