public void TurnKrankThenBallsOverTest()
        {
            var stringWriter = new StringWriter();
            var result       = new StringWriter();
            var gumballMachineStateString = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 0 } gumball{ ( 0 != 1 ? "s" : "" ) }" +
                                            $" { 0 } quarter{ ( 0 != 1 ? "s" : "" ) } " +
                                            $"Machine is { BaseConstants.TO_STRING_SOLD_OUT_STATE })";
            var gumballMachine = new GumballMachineContext(2, stringWriter);

            gumballMachine.InsertQuarter();
            gumballMachine.InsertQuarter();
            gumballMachine.TurnCrank();
            gumballMachine.TurnCrank();
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(MultiGumbalMachineConstants.GetInsertQuarterHasQuarterStateConst(2));
            result.WriteLine(MultiGumbalMachineConstants.GetTurnCrankHasQuarterStateConst(1));
            result.WriteLine(BaseConstants.RELEASE_BALL);
            result.WriteLine(MultiGumbalMachineConstants.GetTurnCrankHasQuarterStateConst(0));
            result.WriteLine(BaseConstants.RELEASE_BALL);
            result.WriteLine(BaseConstants.DISPENSE_SOLD_STATE);

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateString, gumballMachine.ToString());
        }
        public void GumballMachineInHasQuarterStateTest()
        {
            var stringWriter = new StringWriter();
            var result       = new StringWriter();
            var noQuarterStateDescription = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 10 } gumball{ ( 10 != 1 ? "s" : "" ) } Machine is { BaseConstants.TO_STRING_NO_QUARTER_STATE })";
            var noQuarterStateDescriptionAfterDispense = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                                         $" { 9 } gumball{ ( 9 != 1 ? "s" : "" ) } Machine is { BaseConstants.TO_STRING_NO_QUARTER_STATE })";
            var gumballMachine = new GumballMachineContext(10, stringWriter);

            gumballMachine.InsertQuarter();
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);

            gumballMachine.InsertQuarter();
            result.WriteLine(BaseConstants.INSERT_QUARTER_HAS_QUARTER_STATE);
            gumballMachine.EjectQuarter();
            result.WriteLine(BaseConstants.EJECT_QUARTER_HAS_QUARTER_STATE);

            Assert.AreEqual(noQuarterStateDescription, gumballMachine.ToString());

            gumballMachine.SetHasQuarterState();
            gumballMachine.TurnCrank();
            result.WriteLine(BaseConstants.TURN_CRANK_HAS_QUARTER_STATE);
            result.WriteLine(BaseConstants.RELEASE_BALL);

            Assert.AreEqual(noQuarterStateDescriptionAfterDispense, gumballMachine.ToString());
            Assert.AreEqual(result.ToString(), stringWriter.ToString());
        }
예제 #3
0
        public void ReFillWithSomeQuartersTest()
        {
            var stringWriter              = new StringWriter();
            var result                    = new StringWriter();
            var gumballMachine            = new GumballMachineContext(1, stringWriter);
            var gumballMachineStateString = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 10 } gumball{ ( 10 != 1 ? "s" : "" ) }" +
                                            $" { 1 } quarter{ ( 1 != 1 ? "s" : "" ) } " +
                                            $"Machine is { BaseConstants.TO_STRING_HAS_QUARTER_STATE })";
            var soldOutState = new SoldOutState(gumballMachine, stringWriter);

            gumballMachine.InsertQuarter();
            gumballMachine.InsertQuarter();
            gumballMachine.TurnCrank();
            soldOutState.ReFill(10);
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(MultiGumbalMachineConstants.GetInsertQuarterHasQuarterStateConst(2));
            result.WriteLine(MultiGumbalMachineConstants.GetTurnCrankHasQuarterStateConst(1));
            result.WriteLine(BaseConstants.RELEASE_BALL);
            result.WriteLine(BaseConstants.DISPENSE_SOLD_STATE);
            result.WriteLine(MultiGumbalMachineConstants.GetReFillSoldOutStateConst(10));

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateString, gumballMachine.ToString());
        }
        public void InsertQuarter_InHasQuarterState_ShouldNotChangeGMState()
        {
            var gm = new GumballMachineContext(5);

            gm.InsertQuarter();
            gm.InsertQuarter();
            Assert.AreEqual((uint)5, gm.GetBallCount());
            Assert.AreEqual(GetGumballMachineString(5, "waiting for turn of crank"), gm.ToString());
        }
예제 #5
0
        public void InsertQuarter_WithFiveQuarters_ShouldChangeGMStateToMaxQuarterState()
        {
            var gm = new GumballMachineContext(3);

            gm.InsertQuarter();
            gm.InsertQuarter();
            gm.InsertQuarter();
            gm.InsertQuarter();
            gm.InsertQuarter();
            Assert.AreEqual((uint)5, gm.GetQuartersCount());
            Assert.AreEqual(GetGumballMachineString(3, "at the max quarters quantity, waiting for turn of crank"), gm.ToString());
        }
예제 #6
0
        public void CantInsertQuarternGumballInHasQuarterState()
        {
            var  strState = "waiting for turn of crank";
            uint gumballs = 5;
            var  testStr  = GetGumballMachineTestParsedString(gumballs, strState);
            var  gM       = new GumballMachineContext(5);

            gM.InsertQuarter();
            gM.InsertQuarter();
            Assert.AreEqual(gM.GetBallCount(), (uint)5);
            Assert.AreEqual(gM.ToString(), testStr);
        }
예제 #7
0
        public void CanInsert2QuartersTurnCrankInHasQuarterStateAndDespenseBallAndMovetoHasQuarterStateIfBallsMoreThan0()
        {
            var  strState = "waiting for turn of crank";
            uint gumballs = 1;
            var  testStr  = GetGumballMachineTestParsedString(gumballs, strState);
            var  gM       = new GumballMachineContext(2);

            gM.InsertQuarter();
            gM.InsertQuarter();
            gM.TurnCrank();
            Assert.AreEqual(gM.GetBallCount(), gumballs);
            Assert.AreEqual(gM.ToString(), testStr);
        }
예제 #8
0
        public void CanEjectAllQuartersInHasQuarterStateAndMoveToNoQuarterState()
        {
            var  strState = "waiting for quarter";
            uint gumballs = 1;
            var  testStr  = GetGumballMachineTestParsedString(gumballs, strState);
            var  gM       = new GumballMachineContext(gumballs);

            gM.InsertQuarter();
            gM.InsertQuarter();
            gM.EjectQuarters();
            Assert.AreEqual(gM.GetBallCount(), gumballs);
            Assert.AreEqual(gM.ToString(), testStr);
        }
예제 #9
0
        public void CanInsert2QuartersTurnCrankInHasQuarterStateAndDespenseBallAndMoveToSoldOutStateIfBalls0AndReturnQuarters()
        {
            var  strState = "sold out";
            uint gumballs = 0;
            var  testStr  = GetGumballMachineTestParsedString(gumballs, strState);
            var  gM       = new GumballMachineContext(1);

            gM.InsertQuarter();
            gM.InsertQuarter();
            gM.TurnCrank();
            Assert.AreEqual(gM.GetBallCount(), gumballs);
            Assert.AreEqual(gM.ToString(), testStr);
            Assert.AreEqual(gM.GetQuartersController().GetQuartersCount(), (uint)0);
        }
예제 #10
0
        public void Refill_InHasQuarterState_ShouldRefill_And_NotLostQuarters()
        {
            var gm = new GumballMachineContext(2);

            gm.InsertQuarter();
            gm.InsertQuarter();
            Assert.AreEqual(GetGumballMachineString(2, "waiting for turn of crank"), gm.ToString());

            sb.Remove(0, sb.Length);
            gm.Refill(2);

            Assert.AreEqual((uint)4, gm.GetBallCount());
            Assert.AreEqual((uint)2, gm.GetQuartersCount());
            Assert.AreEqual("Gumballs refilled. Gumballs count: 4\r\n", sw.ToString());
        }
예제 #11
0
        public void EjectQuarter_WithQuarters_ShouldReturnAllQuarters()
        {
            var gm = new GumballMachineContext(5);

            gm.InsertQuarter();
            gm.InsertQuarter();
            gm.InsertQuarter();

            Assert.AreEqual((uint)3, gm.GetQuartersCount());

            sb.Remove(0, sb.Length);
            gm.EjectQuarter();
            Assert.AreEqual((uint)0, gm.GetQuartersCount());
            Assert.AreEqual("Quarters returned\r\n", sw.ToString());
        }
        public void TurnKrankAndEjectSomeQuartersTest()
        {
            var stringWriter = new StringWriter();
            var result       = new StringWriter();
            var gumballMachineStateString = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 2 } gumball{ ( 2 != 1 ? "s" : "" ) }" +
                                            $" { 0 } quarter{ ( 0 != 1 ? "s" : "" ) } " +
                                            $"Machine is { BaseConstants.TO_STRING_NO_QUARTER_STATE })";
            var gumballMachine = new GumballMachineContext(4, stringWriter);

            for (int i = 0; i < 4; i++)
            {
                gumballMachine.InsertQuarter();
            }
            gumballMachine.TurnCrank();
            gumballMachine.TurnCrank();
            gumballMachine.EjectQuarter();

            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(MultiGumbalMachineConstants.GetInsertQuarterHasQuarterStateConst(2));
            result.WriteLine(MultiGumbalMachineConstants.GetInsertQuarterHasQuarterStateConst(3));
            result.WriteLine(MultiGumbalMachineConstants.GetInsertQuarterHasQuarterStateConst(4));
            result.WriteLine(MultiGumbalMachineConstants.GetTurnCrankHasQuarterStateConst(3));
            result.WriteLine(BaseConstants.RELEASE_BALL);
            result.WriteLine(MultiGumbalMachineConstants.GetTurnCrankHasQuarterStateConst(2));
            result.WriteLine(BaseConstants.RELEASE_BALL);
            result.WriteLine(MultiGumbalMachineConstants.GetEjectQuarterHasQuarterStateConst(2));

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateString, gumballMachine.ToString());
        }
        public void InsertSomeQuarterTest()
        {
            var    stringWriter = new StringWriter();
            var    result       = new StringWriter();
            string gumballMachineStateResult = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                               $" { 1 } gumball{ ( 1 != 1 ? "s" : "" ) } Machine is { BaseConstants.TO_STRING_HAS_QUARTER_STATE })";
            var gumballMachine = new GumballMachineContext(1, stringWriter);

            gumballMachine.InsertQuarter();
            gumballMachine.InsertQuarter();
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(BaseConstants.INSERT_QUARTER_HAS_QUARTER_STATE);

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateResult, gumballMachine.ToString());
        }
        public void InsertQuarter_InSoldOutState_ShouldNotChangeGMState()
        {
            var gm = new GumballMachineContext(0);

            gm.InsertQuarter();
            Assert.AreEqual((uint)0, gm.GetBallCount());
            Assert.AreEqual(GetGumballMachineString(0, "sold out"), gm.ToString());
        }
예제 #15
0
        public void InsertQuarter_WithQuarter_ShouldInsertQuarter_And_PrintInfo()
        {
            var gm = new GumballMachineContext(3);

            gm.InsertQuarter();
            Assert.AreEqual((uint)1, gm.GetQuartersCount());
            Assert.AreEqual("You inserted a quarter. Quarters count: 1\r\n", sw.ToString());
        }
        public void TurnCrank_WithOneBall_InHasQuarterState_ShouldChangeGMStateToSoldOutState()
        {
            var gm = new GumballMachineContext(1);

            gm.InsertQuarter();
            gm.TurnCrank();
            Assert.AreEqual((uint)0, gm.GetBallCount());
            Assert.AreEqual(GetGumballMachineString(0, "sold out"), gm.ToString());
        }
        public void TurnCrank_WithBalls_InHasQuarterState_ShouldChangeGMStateToNoQuarterState()
        {
            var gm = new GumballMachineContext(2);

            gm.InsertQuarter();
            gm.TurnCrank();
            Assert.AreEqual((uint)1, gm.GetBallCount());
            Assert.AreEqual(GetGumballMachineString(1, "waiting for quarter"), gm.ToString());
        }
예제 #18
0
        public void EjectQuarter_InSoldOutState_ShouldReturnAllQuarters()
        {
            var gm = new GumballMachineContext(1);

            gm.InsertQuarter();
            gm.InsertQuarter();
            gm.InsertQuarter();

            Assert.AreEqual((uint)3, gm.GetQuartersCount());

            gm.TurnCrank();
            Assert.AreEqual(GetGumballMachineString(0, "sold out"), gm.ToString());

            sb.Remove(0, sb.Length);
            gm.EjectQuarter();
            Assert.AreEqual((uint)0, gm.GetQuartersCount());
            Assert.AreEqual("Quarters returned\r\n", sw.ToString());
        }
예제 #19
0
        public void CantInsertQuarterInSoldOutState()
        {
            var  strState = "sold out";
            uint gumballs = 0;
            var  testStr  = GetGumballMachineTestParsedString(gumballs, strState);
            var  gM       = new GumballMachineContext();

            gM.InsertQuarter();
            Assert.AreEqual(gM.GetBallCount(), (uint)0);
            Assert.AreEqual(gM.ToString(), testStr);
        }
예제 #20
0
        public void EjectQuarterWithSomeQuartersTest()
        {
            var stringWriter              = new StringWriter();
            var result                    = new StringWriter();
            var gumballMachine            = new GumballMachineContext(2, stringWriter);
            var gumballMachineStateString = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 2 } gumball{ ( 2 != 1 ? "s" : "" ) }" +
                                            $" { 0 } quarter{ ( 0 != 1 ? "s" : "" ) } " +
                                            $"Machine is { BaseConstants.TO_STRING_HAS_QUARTER_STATE })";
            var soldOutState = new SoldOutState(gumballMachine, stringWriter);

            gumballMachine.InsertQuarter();
            gumballMachine.InsertQuarter();
            soldOutState.EjectQuarter();
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(MultiGumbalMachineConstants.GetInsertQuarterHasQuarterStateConst(2));
            result.WriteLine(MultiGumbalMachineConstants.GetEjectQuarterSoldOutStateConst(2));

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateString, gumballMachine.ToString());
        }
예제 #21
0
        public void CanTurnCrankInHasQuarterStateAndGoToNoQuarterStateIfAmountOfGumballsBeforeTurningCrankMoreThan1()
        {
            var  strState = "waiting for quarter";
            uint gumballs = 1;
            var  testStr  = GetGumballMachineTestParsedString(gumballs, strState);
            var  gM       = new GumballMachineContext(2);

            gM.InsertQuarter();
            gM.TurnCrank();
            Assert.AreEqual(gM.GetBallCount(), (uint)1);
            Assert.AreEqual(gM.ToString(), testStr);
        }
예제 #22
0
        public void CanTurnCrankInHasQuarterStateAndGoToNoQuarterStateIfAmountOfGumballsIs1BeforeTurningCrank()
        {
            var  strState = "sold out";
            uint gumballs = 0;
            var  testStr  = GetGumballMachineTestParsedString(gumballs, strState);
            var  gM       = new GumballMachineContext(1);

            gM.InsertQuarter();
            gM.TurnCrank();
            Assert.AreEqual(gM.GetBallCount(), (uint)0);
            Assert.AreEqual(gM.ToString(), testStr);
        }
예제 #23
0
        public void TurnCrank_And_InsertExtraQuarters_ShouldNotChangeGMState()
        {
            var gm = new GumballMachineContext(5);

            gm.InsertQuarter();
            gm.InsertQuarter();
            gm.InsertQuarter();

            Assert.AreEqual((uint)3, gm.GetQuartersCount());

            gm.TurnCrank();
            gm.TurnCrank();

            Assert.AreEqual((uint)1, gm.GetQuartersCount());
            Assert.AreEqual((uint)3, gm.GetBallCount());

            gm.InsertQuarter();

            Assert.AreEqual((uint)2, gm.GetQuartersCount());
            Assert.AreEqual(GetGumballMachineString(3, "waiting for turn of crank"), gm.ToString());
        }
        public void GumballMachineInSoldOutStateTest()
        {
            var stringWriter   = new StringWriter();
            var result         = new StringWriter();
            var gumballMachine = new GumballMachineContext(0, stringWriter);

            gumballMachine.InsertQuarter();
            result.WriteLine(BaseConstants.INSERT_QUARTER_SOLD_OUT_STATE);
            gumballMachine.EjectQuarter();
            result.WriteLine(BaseConstants.EJECT_QUARTER_SOLD_OUT_STATE);
            gumballMachine.TurnCrank();
            result.WriteLine(BaseConstants.TURN_CRANK_SOLD_OUT_STATE);
            result.WriteLine(BaseConstants.DISPENSE_SOLD_OUT_STATE);

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
        }
        public void InsertQuarterWithZeroBallsTest()
        {
            var stringWriter = new StringWriter();
            var result       = new StringWriter();
            var gumballMachineStateString = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 0 } gumball{ ( 0 != 1 ? "s" : "" ) }" +
                                            $" { 0 } quarter{ ( 0 != 1 ? "s" : "" ) } " +
                                            $"Machine is { BaseConstants.TO_STRING_SOLD_OUT_STATE })";
            var gumballMachine = new GumballMachineContext(0, stringWriter);

            gumballMachine.InsertQuarter();
            result.WriteLine(BaseConstants.INSERT_QUARTER_SOLD_OUT_STATE);

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateString, gumballMachine.ToString());
        }
        public void TurnCrankWithQuarterAndSomeBalls()
        {
            var    stringWriter = new StringWriter();
            var    result       = new StringWriter();
            string gumballMachineStateResult = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                               $" { 1 } gumball{ ( 1 != 1 ? "s" : "" ) } Machine is { BaseConstants.TO_STRING_NO_QUARTER_STATE })";
            var gumballMachine = new GumballMachineContext(2, stringWriter);

            gumballMachine.InsertQuarter();
            gumballMachine.TurnCrank();
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(BaseConstants.TURN_CRANK_HAS_QUARTER_STATE);
            result.WriteLine(BaseConstants.RELEASE_BALL);

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateResult, gumballMachine.ToString());
        }
        public void ReFillAfterInsertQuarterTest()
        {
            var stringWriter = new StringWriter();
            var result       = new StringWriter();
            var gumballMachineStateString = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 2 } gumball{ ( 2 != 1 ? "s" : "" ) }" +
                                            $" { 1 } quarter{ ( 1 != 1 ? "s" : "" ) } " +
                                            $"Machine is { BaseConstants.TO_STRING_HAS_QUARTER_STATE })";
            var gumballMachine = new GumballMachineContext(2, stringWriter);

            gumballMachine.InsertQuarter();
            gumballMachine.ReFill(10);
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(MultiGumbalMachineConstants.REFILL_HAS_QUARTER_STATE);

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateString, gumballMachine.ToString());
        }
예제 #28
0
        public void DispenseWithSomeBallsTest()
        {
            var stringWriter              = new StringWriter();
            var result                    = new StringWriter();
            var gumballMachine            = new GumballMachineContext(2, stringWriter);
            var gumballMachineStateString = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 1 } gumball{ ( 1 != 1 ? "s" : "" ) } " +
                                            $"Machine is { BaseConstants.TO_STRING_NO_QUARTER_STATE })";
            var soldState = new SoldState(gumballMachine, stringWriter);

            gumballMachine.InsertQuarter();
            soldState.Dispense();
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(BaseConstants.RELEASE_BALL);

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateString, gumballMachine.ToString());
        }
예제 #29
0
        public void CantInsertMoreThan5Quarters()
        {
            uint gumballs = 1;
            var  gM       = new GumballMachineContext(gumballs);

            gM.InsertQuarter();
            gM.InsertQuarter();
            gM.InsertQuarter();
            gM.InsertQuarter();
            gM.InsertQuarter();
            gM.InsertQuarter();
            Assert.AreEqual(gM.GetQuartersController().GetQuartersCount(), (uint)5);
        }
예제 #30
0
        public void DispenseWithZeroBallsTest()
        {
            var stringWriter              = new StringWriter();
            var result                    = new StringWriter();
            var gumballMachine            = new GumballMachineContext(1, stringWriter);
            var gumballMachineStateString = $"(Mighty Gumball, Inc.C# - enabled Standing Gumball Model #2019 (with state)Inventory:" +
                                            $" { 0 } gumball{ ( 0 != 1 ? "s" : "" ) } " +
                                            $"Machine is { BaseConstants.TO_STRING_SOLD_OUT_STATE })";
            var soldState       = new SoldState(gumballMachine, stringWriter);
            var hasQuarterState = new HasQuarterState(gumballMachine, stringWriter);

            gumballMachine.InsertQuarter();
            hasQuarterState.TurnCrank();
            soldState.Dispense();
            result.WriteLine(BaseConstants.INSERT_QUARTER_NO_QUARTER_STATE);
            result.WriteLine(BaseConstants.TURN_CRANK_HAS_QUARTER_STATE);
            result.WriteLine(BaseConstants.RELEASE_BALL);
            result.WriteLine(BaseConstants.DISPENSE_SOLD_STATE);

            Assert.AreEqual(result.ToString(), stringWriter.ToString());
            Assert.AreEqual(gumballMachineStateString, gumballMachine.ToString());
        }