private static SummaryData ExecuteBonus(int level, RequestContext <BonusArgs> requestContext, FortuneKoiSpinResult result) { var bonus = module.CreateBonus(result); var fortunekoiBonus = bonus.Value as FortuneKoiBonus; var summData = new SummaryData(); var bonusContext = new BonusStateContext(level, fortunekoiBonus); do { summData.FSpinCounter++; var bonusSpinResult = bonusContext.SetState(fortunekoiBonus.State).Transform(requestContext); var spinResult = bonusSpinResult.SpinResult; if (spinResult.HasBonus) { summData.FgFHit++; } summData.FgTotalWin += spinResult.Win; if (bonusContext.IsCompleted) { break; } fortunekoiBonus.State = bonusContext.GetState(); } while (true); return(summData); }
public void TestReSpinFeature() { // arrange var user = new UserGameKey(-1, 32); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 10, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "FortuneKoi", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new FortuneKoiBonus { SpinBet = bet }); var state = new ReSpinState(new List <int[]> { new int[] { }, new int[] { 7, 7, 7 }, new int[] { }, new int[] { }, new int[] { } }, new bool[] { false, true, false, false, false }); //Action var response = state.Handle(requestBonusContext, bonusContext); var result = response.result; var responseXml = xmlhelper.Serialize(result.ToResponseXml(ResponseXmlFormat.None)); var element = XElement.Parse(responseXml, LoadOptions.PreserveWhitespace); // Assert Assert.IsNotNull(element); Assert.IsTrue(element.Element("data").Element("spin").Element("wheels") != null); Assert.AreEqual(result.Win, decimal.Parse(element.Element("win").Value)); Assert.AreEqual(result.Win > 0, element.Element("data").Element("spin").Element("winposition").Descendants().Count() > 0); if (result.SpinResult.HasBonus) { Assert.IsNotNull(element.Element("data").Element("spin").Element("bonus")); Assert.IsTrue(string.IsNullOrEmpty(element.Element("data").Element("spin").Element("bonusposition").Value) == false); Assert.IsNotNull(element.Element("data").Element("spin").Element("bonusposition")); Assert.IsTrue(element.Element("data").Element("spin").Element("bonusposition").Descendants().Count() > 0); } }
public void TestExplodingFeature() { // arrange var user = new UserGameKey(-1, 109); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "FortuneChimes", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new FortuneChimesBonus { SpinBet = bet }); var bonusPositions = new List <BonusPosition> { new BonusPosition { RowPositions = new List <int> { 1, 1, 1, 0, 0 } } }; var wheel = new FortuneChimesWheel { Reels = new List <int[]> { new[] { 1, -1, -1 }, new[] { 1, -1, -1 }, new[] { 1, -1, -1 }, new[] { -1, -1, -1 }, new[] { -1, -1, -1 } }, Indices = new int[] { 1, 2, 3, 4, 5 } }; var reSpinCollapse = new ReSpinCollapse(bonusPositions, wheel, new List <int[]> { new int[0], new int[0], new int[0], new int[] { -1, -2, -3 }, new int[] { -1, -2, -3 } }); var state = new ReSpinState(reSpinCollapse); //Action var response = state.Handle(requestBonusContext, bonusContext); // Assert Assert.AreEqual(response.result.Win > 0, response.nextState is ReSpinState); Assert.AreEqual(response.result.Win > 0, !response.nextState.IsCompleted); Assert.AreEqual(response.result.Win == 0, response.nextState is Finish); }
public void TestReSpinFeature() { // arrange var user = new UserGameKey(-1, 32); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 10, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "FortuneKoi", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new FortuneKoiBonus { SpinBet = bet }); var state = new ReSpinState(new List <int[]> { new [] { 0, 1, 2 }, new [] { 0, 7, 1 }, new [] { 4, 5, 6 }, new [] { 1, 2, 3 }, new [] { 6, 5, 4 } }, new bool[] { false, true, false, false, false }); //Action var response = state.Handle(requestBonusContext, bonusContext); var spinResult = response.result.SpinResult; var wheel = spinResult.Wheel; // Assert Assert.AreEqual(spinResult.HasBonus, !response.nextState.IsCompleted); Assert.AreEqual(wheel[2].Any(item => item == 7) || wheel[3].Any(item => item == 7), response.nextState is ReSpinState); Assert.AreEqual(wheel[2].All(item => item < 7) && wheel[3].All(item => item < 7), response.nextState is Finish); }
public void TestSarchophagusFeature() { // arrange var user = new UserGameKey(-1, 51); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 50, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Cleopatra", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new CleopatraBonus { SpinBet = bet }); var state = new SarchophagusState(new PreSpin(1, 0)); //Action var response = state.Handle(requestBonusContext, bonusContext); var result = response.result; var responseXml = xmlhelper.Serialize(result.ToResponseXml(ResponseXmlFormat.None)); var element = XElement.Parse(responseXml, LoadOptions.PreserveWhitespace); // Assert Assert.IsNotNull(element); Assert.AreEqual(result.Win > 0, element.Element("win") != null); Assert.AreEqual(result.Win, decimal.Parse(element.Element("win").Value)); Assert.AreEqual(result.Win > 0, element.Element("data").Element("spin").Element("winposition") != null); Assert.AreEqual("", element.Element("data").Element("spin").Element("winposition").Value); }
public void TestFreeSpinFeature() { // arrange var user = new UserGameKey(-1, 51); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 50, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Cleopatra", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new CleopatraBonus { SpinBet = bet }); var state = new FreeSpinState(1, 0); //Action var reponse = state.Handle(requestBonusContext, bonusContext); // Assert Assert.AreEqual(!reponse.result.SpinResult.HasBonus, reponse.nextState.IsCompleted); Assert.AreEqual(!reponse.result.SpinResult.HasBonus, reponse.nextState is FreeSpinState); Assert.AreEqual(reponse.result.SpinResult.HasBonus, reponse.nextState is SarchophagusState); }
private static SummaryData ExecuteBonus(int level, RequestContext <BonusArgs> requestContext, CleopatraSpinResult result) { var bonus = module.CreateBonus(result); var cleopatraBonus = bonus.Value as CleopatraBonus; var summData = new SummaryData(); var bonusContext = new BonusStateContext(level, cleopatraBonus); do { var bonusSpinResult = bonusContext.SetState(cleopatraBonus.State).Transform(requestContext); if (bonusSpinResult.SpinResult.HasBonus) { summData.FgSarchophagusHit++; } switch (bonusSpinResult.GameResultType) { case Model.GameResultType.FreeSpinResult: summData.FSpinCounter++; summData.FSTotalWin += bonusSpinResult.Win; break; case Model.GameResultType.RevealResult: summData.FgSarchophagusWin += bonusSpinResult.Win; break; default: throw new InvalidOperationException(); } if (bonusSpinResult.IsCompleted) { break; } cleopatraBonus.State = bonusContext.GetState(); } while (true); return(summData); }
private static SummaryData ExecuteBonus(int level, RequestContext <BonusArgs> requestContext, FortuneChimesSpinResult result) { var bonus = module.CreateBonus(result); var fortunechimesBonus = bonus.Value as FortuneChimesBonus; var summData = new SummaryData(); var bonusContext = new BonusStateContext(level, fortunechimesBonus); do { var bonusSpinResult = bonusContext.SetState(fortunechimesBonus.State).Transform(requestContext); var spinResult = bonusSpinResult.SpinResult; if (spinResult.HasBonus) { var additionBonus = spinResult.Bonus; if (additionBonus.ClientId == 3) { summData.MgFHit++; } else if (additionBonus.ClientId == 4) { summData.FgExplodingHit++; } else if (additionBonus.ClientId == 5) { summData.FgRevealHit++; } } switch (fortunechimesBonus.State) { case ReSpinState _: var nonScatterWin = spinResult.WinPositions.Where(winline => winline.Line > 0).Sum(item => item.Win); var instanceWin = spinResult.InstanceWin != null ? spinResult.InstanceWin.Win : 0; summData.MgNonScatterExplodingWin += nonScatterWin; summData.MgScatterExplodingWin += (spinResult.Win - instanceWin - nonScatterWin); summData.ExplodingCounter += spinResult.InstanceWin != null ? 1 : 0; summData.MgRevealWin += instanceWin; break; case FreeSpinReSpinState _: instanceWin = spinResult.InstanceWin != null ? spinResult.InstanceWin.Win : 0; summData.FgExplodingWin += (spinResult.Win - instanceWin); summData.FgRevealWin += instanceWin; break; case FreeSpinState _: summData.FSTotalWin += spinResult.Win; summData.FSpinCounter++; break; default: throw new Exception(); } if (bonusContext.IsCompleted) { break; } fortunechimesBonus.State = bonusContext.GetState(); } while (true); return(summData); }
public void TestReSpinCollapseFeature() { // arrange var user = new UserGameKey(-1, 109); var userSession = new UserSession { SessionKey = "unittest", UserId = -1 }; var bet = new SpinBet(user, PlatformType.None) { Lines = 30, LineBet = 1.0m, Multiplier = 1 }; var requestBonusContext = new RequestContext <BonusArgs>("unittest", "Fortune Chimes", PlatformType.None) { GameSetting = new GameSetting { GameSettingGroupId = 1 }, Query = new QueryCollection { }, }; requestBonusContext.UserSession = userSession; requestBonusContext.UserGameKey = user; var bonusContext = new BonusStateContext(1, new FortuneChimesBonus { SpinBet = bet }); var bonusPositions = new List <BonusPosition> { new BonusPosition { Line = 1, RowPositions = new List <int> { 1, 1, 1, 0, 0 } } }; var wheel = new FortuneChimesWheel { Reels = new List <int[]> { new[] { 1, -1, -1 }, new[] { 1, -1, -1 }, new[] { 1, -1, -1 }, new[] { -1, -1, -1 }, new[] { -1, -1, -1 } }, Indices = new int[] { 1, 2, 3, 4, 5 } }; var state = new ReSpinState(new ReSpinCollapse(bonusPositions, wheel, new List <int[]> { new int[0], new int[0], new int[0], new int[] { 1, 2, 4 }, new int[] { 2, 5, 7 } })); //Action var response = state.Handle(requestBonusContext, bonusContext); var result = response.result; var instanceWin = result.SpinResult.InstanceWin; var responseXml = xmlhelper.Serialize(result.ToResponseXml(ResponseXmlFormat.None)); var element = XElement.Parse(responseXml, LoadOptions.PreserveWhitespace); // Assert Assert.IsNotNull(element); Assert.IsTrue(element.Element("data").Element("spin").Element("wheels") != null); Assert.AreEqual(result.Win, decimal.Parse(element.Element("win").Value)); Assert.AreEqual(result.Win > 0, element.Element("data").Element("spin").Element("winposition").Descendants().Count() > 0); Assert.AreEqual(result.SpinResult.HasBonus, !string.IsNullOrEmpty(element.Element("data").Element("spin").Element("bonus").Value)); Assert.AreEqual(result.SpinResult.HasBonus, element.Element("data").Element("spin").Element("bonusposition").Descendants().Count() > 0); Assert.AreEqual(instanceWin != null, element.Element("data").Element("spin").Element("iw").HasAttributes); }