public void Constructor_Sets_Initial_Values()
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Verify(s => s.SetAddress(nameof(ThermostatContract.Installer), this.installer));
            this.mockPersistentState.Verify(s => s.SetAddress(nameof(ThermostatContract.User), this.user));
            this.mockPersistentState.Verify(s => s.SetInt32(nameof(ThermostatContract.TargetTemperature), TargetTemperature));
        }
        public void SetTargetTemperature_Throws_If_Caller_Not_User()
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Setup(s => s.GetAddress(nameof(ThermostatContract.User))).Returns(this.user);

            this.mockContractState.Setup(s => s.Message.Sender).Returns(Address.Zero);

            Assert.Throws <SmartContractAssertException>(() => thermostat.SetTargetTemperature(TargetTemperature - 1));
        }
        public void StartThermostat_Throws_If_Caller_Not_Installer()
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Setup(s => s.GetAddress(nameof(ThermostatContract.Installer))).Returns(this.installer);

            this.mockContractState.Setup(s => s.Message.Sender).Returns(Address.Zero);

            Assert.Throws <SmartContractAssertException>(() => thermostat.StartThermostat());
        }
        public void StartThermostat_Throws_If_Caller_Installer_But_State_Not_Created()
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Setup(s => s.GetUInt32(nameof(ThermostatContract.State))).Returns((uint)ThermostatContract.StateType.InUse);

            this.mockPersistentState.Setup(s => s.GetAddress(nameof(ThermostatContract.Installer))).Returns(this.installer);

            this.mockContractState.Setup(s => s.Message.Sender).Returns(this.installer);

            Assert.Throws <SmartContractAssertException>(() => thermostat.StartThermostat());
        }
        public void SetMode_Invalid_Does_Not_Set_Mode(uint mode)
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Setup(s => s.GetUInt32(nameof(ThermostatContract.State))).Returns((uint)ThermostatContract.StateType.InUse);

            this.mockPersistentState.Setup(s => s.GetAddress(nameof(ThermostatContract.User))).Returns(this.user);

            this.mockContractState.Setup(s => s.Message.Sender).Returns(this.user);

            Assert.Throws <SmartContractAssertException>(() => thermostat.SetMode(mode));
        }
        public void SetTargetTemperature_Throws_If_Caller_User_But_State_Not_InUse()
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Setup(s => s.GetUInt32(nameof(ThermostatContract.State))).Returns((uint)ThermostatContract.StateType.Created);

            this.mockPersistentState.Setup(s => s.GetAddress(nameof(ThermostatContract.User))).Returns(this.user);

            this.mockContractState.Setup(s => s.Message.Sender).Returns(this.user);

            Assert.Throws <SmartContractAssertException>(() => thermostat.SetTargetTemperature(TargetTemperature - 1));
        }
        public void StartThermostat_Sets_State_InUse()
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Setup(s => s.GetUInt32(nameof(ThermostatContract.State))).Returns((uint)ThermostatContract.StateType.Created);

            this.mockPersistentState.Setup(s => s.GetAddress(nameof(ThermostatContract.Installer))).Returns(this.installer);

            this.mockContractState.Setup(s => s.Message.Sender).Returns(this.installer);

            thermostat.StartThermostat();

            this.mockPersistentState.Verify(s => s.SetUInt32(nameof(ThermostatContract.State), (uint)ThermostatContract.StateType.InUse));
        }
        public void SetMode_Sets_Mode(uint mode)
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Setup(s => s.GetUInt32(nameof(ThermostatContract.State))).Returns((uint)ThermostatContract.StateType.InUse);

            this.mockPersistentState.Setup(s => s.GetAddress(nameof(ThermostatContract.User))).Returns(this.user);

            this.mockContractState.Setup(s => s.Message.Sender).Returns(this.user);

            thermostat.SetMode(mode);

            this.mockPersistentState.Verify(s => s.SetUInt32(nameof(ThermostatContract.Mode), mode));
        }
        public void SetTargetTemperature_Sets_TargetTemperature(int targetTemperature)
        {
            ThermostatContract thermostat = this.NewThermostat();

            this.mockPersistentState.Setup(s => s.GetUInt32(nameof(ThermostatContract.State))).Returns((uint)ThermostatContract.StateType.InUse);

            this.mockPersistentState.Setup(s => s.GetAddress(nameof(ThermostatContract.User))).Returns(this.user);

            this.mockContractState.Setup(s => s.Message.Sender).Returns(this.user);

            thermostat.SetTargetTemperature(targetTemperature);

            this.mockPersistentState.Verify(s => s.SetInt32(nameof(ThermostatContract.TargetTemperature), targetTemperature));
        }