Continous Integration in der Praxis Gruppenarbeit
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

476 lines
15 KiB

  1. using MiniGames.Client.ViewModel;
  2. using MiniGames.Shared.Enums;
  3. using MiniGames.Shared.Models;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using Xunit;
  7. namespace MiniGamesTests
  8. {
  9. public class UnoTest
  10. {
  11. public Uno UnoRegeln = new();
  12. public List<SpielerModel> SpielerModels = new();
  13. private KartenModel BeispielKarte(string name, string farbe, bool spezial)
  14. {
  15. var _name = name;
  16. var _farbe = farbe;
  17. var _spezial = spezial;
  18. KartenModel kartenModel = new()
  19. {
  20. Name = _name,
  21. Farbe = _farbe,
  22. Spezial = _spezial
  23. };
  24. return kartenModel;
  25. }
  26. private HandKartenModel BeispielHand()
  27. {
  28. HandKartenModel HandStapel = new()
  29. {
  30. SpielerModel = new()
  31. {
  32. Id = 1,
  33. SpielerName = "Andrej",
  34. },
  35. KartenModels = new()
  36. {
  37. new KartenModel
  38. {
  39. Name = Kartenbezeichnung.PlusZweiKarte.ToString(),
  40. Farbe = Farbe.Gelb.ToString(),
  41. Spezial = true
  42. }
  43. }
  44. };
  45. return HandStapel;
  46. }
  47. private void BeispielSpielerModelsFüllen(int id, string spielerName)
  48. {
  49. int _id = id;
  50. string _spielerName = spielerName;
  51. SpielerModels.Add(new SpielerModel()
  52. {
  53. Id = _id,
  54. SpielerName = _spielerName,
  55. Punkte = 0
  56. });
  57. }
  58. private void BeispielMultipleSpielerModelsFüllen(int anzahlSpieler)
  59. {
  60. switch (anzahlSpieler)
  61. {
  62. case 2:
  63. BeispielSpielerModelsFüllen(1, "Hans");
  64. BeispielSpielerModelsFüllen(2, "Peter");
  65. break;
  66. case 3:
  67. BeispielSpielerModelsFüllen(1, "Hans");
  68. BeispielSpielerModelsFüllen(2, "Peter");
  69. BeispielSpielerModelsFüllen(3, "Anna");
  70. break;
  71. case 4:
  72. BeispielSpielerModelsFüllen(1, "Hans");
  73. BeispielSpielerModelsFüllen(2, "Peter");
  74. BeispielSpielerModelsFüllen(3, "Anna");
  75. BeispielSpielerModelsFüllen(4, "Klaus");
  76. break;
  77. case 5:
  78. BeispielSpielerModelsFüllen(1, "Hans");
  79. BeispielSpielerModelsFüllen(2, "Peter");
  80. BeispielSpielerModelsFüllen(3, "Anna");
  81. BeispielSpielerModelsFüllen(4, "Klaus");
  82. BeispielSpielerModelsFüllen(5, "Brigitte");
  83. break;
  84. default:
  85. break;
  86. }
  87. }
  88. private StapelModel BeispielStapelModelKarten(string name, string farbe, bool spezial)
  89. {
  90. var _name = name;
  91. var _farbe = farbe;
  92. var _spezial = spezial;
  93. StapelModel TestStapel = new();
  94. TestStapel.KartenModels = new()
  95. {
  96. new KartenModel
  97. {
  98. Name = _name,
  99. Farbe = _farbe,
  100. Spezial = _spezial
  101. },
  102. };
  103. return TestStapel;
  104. }
  105. #region UserManagement
  106. [Theory]
  107. [InlineData("Andrej", 1)]
  108. private void SpielerErstellenTest(string spielerName, int id)
  109. {
  110. //arrange
  111. var _spielerName = spielerName;
  112. var _id = id;
  113. //act
  114. UnoRegeln.SpielerErstellen(_spielerName);
  115. var ergebnis = UnoRegeln.Spieler;
  116. //assert
  117. Assert.Equal(_spielerName, ergebnis[0].SpielerModel.SpielerName);
  118. Assert.Equal(_id, ergebnis[0].SpielerModel.Id);
  119. }
  120. [Theory]
  121. [InlineData("Andrej", 1, "Paul", 2, "Erhard", 3)]
  122. [InlineData("Sabine", 1, "Erich", 2, "Anna", 3)]
  123. [InlineData("Thomas", 1, "Mike", 2, "Robin", 3)]
  124. private void MehrereSpielerErstellenTest(string spielerEinsName, int spielerEinsId, string spielerZweiName, int spielerZweiId, string spielerDreiName, int spielerDreiId)
  125. {
  126. //arrange
  127. var _spielerEinsName = spielerEinsName;
  128. var _spielerEinsId = spielerEinsId;
  129. var _spielerZweiName = spielerZweiName;
  130. var _spielerZweiId = spielerZweiId;
  131. var _spielerDreiName = spielerDreiName;
  132. var _spielerDreiId = spielerDreiId;
  133. //act
  134. UnoRegeln.SpielerErstellen(_spielerEinsName);
  135. UnoRegeln.SpielerErstellen(_spielerZweiName);
  136. UnoRegeln.SpielerErstellen(_spielerDreiName);
  137. var ergebnis = UnoRegeln.Spieler;
  138. //assert
  139. Assert.Equal(_spielerEinsName, ergebnis[0].SpielerModel.SpielerName);
  140. Assert.Equal(_spielerEinsId, ergebnis[0].SpielerModel.Id);
  141. Assert.NotNull(ergebnis[0].KartenModels);
  142. Assert.Equal(_spielerZweiName, ergebnis[1].SpielerModel.SpielerName);
  143. Assert.Equal(_spielerZweiId, ergebnis[1].SpielerModel.Id);
  144. Assert.NotNull(ergebnis[1].KartenModels);
  145. Assert.Equal(_spielerDreiName, ergebnis[2].SpielerModel.SpielerName);
  146. Assert.Equal(_spielerDreiId, ergebnis[2].SpielerModel.Id);
  147. Assert.NotNull(ergebnis[2].KartenModels);
  148. }
  149. [Theory]
  150. [InlineData(2)]
  151. [InlineData(3)]
  152. [InlineData(4)]
  153. [InlineData(5)]
  154. private void InitialeKartenVerteilungTest(int anzahlSpieler)
  155. {
  156. //arrange
  157. var _anzahlSpieler = anzahlSpieler;
  158. BeispielMultipleSpielerModelsFüllen(_anzahlSpieler);
  159. foreach (var spieler in SpielerModels)
  160. {
  161. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  162. }
  163. UnoRegeln.ZiehKartenStapelZusammenstellen();
  164. //act
  165. UnoRegeln.InitialeKartenVerteilung();
  166. //assert
  167. foreach (var spieler in UnoRegeln.Spieler)
  168. {
  169. Assert.Equal(7, spieler.KartenModels.Count());
  170. }
  171. }
  172. [Theory]
  173. [InlineData("Andrej", 1, "Paul", 2, "Erhard", 3, true, 2, 3)]
  174. [InlineData("Sabine", 1, "Erich", 2, "Anna", 3, false, 3, 2)]
  175. [InlineData("Thomas", 1, "Mike", 2, "Robin", 3, true, 2, 3)]
  176. [InlineData("Andrej", 1, "Paul", 2, "Erhard", 3, true, 3, 1)]
  177. [InlineData("Sabine", 1, "Erich", 2, "Anna", 3, false, 1, 3)]
  178. private void NaechsterSpielerTest(string spielerEinsName, int spielerEinsId, string spielerZweiName, int spielerZweiId, string spielerDreiName, int spielerDreiId, bool uhrZeigerSinn, int aktuellerSpieler, int naechsterErwartung)
  179. {
  180. //arrange
  181. var _spielerEinsName = spielerEinsName;
  182. var _spielerEinsId = spielerEinsId;
  183. var _spielerZweiName = spielerZweiName;
  184. var _spielerZweiId = spielerZweiId;
  185. var _spielerDreiName = spielerDreiName;
  186. var _spielerDreiId = spielerDreiId;
  187. var _uhrZeigerSinn = uhrZeigerSinn;
  188. var _aktuellerSpieler = aktuellerSpieler;
  189. var _naechsterErwartung = naechsterErwartung;
  190. //act
  191. UnoRegeln.SpielerErstellen(_spielerEinsName);
  192. UnoRegeln.SpielerErstellen(_spielerZweiName);
  193. UnoRegeln.SpielerErstellen(_spielerDreiName);
  194. UnoRegeln.NaechsterSpielerWahl(_aktuellerSpieler, _uhrZeigerSinn);
  195. //assert
  196. Assert.Equal(_naechsterErwartung, UnoRegeln.NaechsterSpielerId);
  197. }
  198. #endregion
  199. [Theory]
  200. [InlineData(Farbe.Rot, Farbe.Rot, true)]
  201. [InlineData(Farbe.Blau, Farbe.Rot, false)]
  202. [InlineData(Farbe.Rot, Farbe.Blau, false)]
  203. [InlineData(Farbe.Blau, Farbe.Blau, true)]
  204. [InlineData(Farbe.Gelb, Farbe.Rot, false)]
  205. [InlineData(Farbe.Gruen, Farbe.Gruen, true)]
  206. private void IstAblageStapelFarbeGleichZuLegendeKarteTest(Farbe ablegeStapelKarteFarbe, Farbe neueKarteFarbe, bool erwartet)
  207. {
  208. //arrange
  209. var _ablegeStabelKarteFarbe = ablegeStapelKarteFarbe.ToString();
  210. var _neueKarteFarbe = neueKarteFarbe.ToString();
  211. var _erwartet = erwartet;
  212. //act
  213. UnoRegeln.KartenAblageStapel.KartenModels = new();
  214. UnoRegeln.KartenAblageStapel.KartenModels.Add(
  215. BeispielKarte("Testkarten Name", _ablegeStabelKarteFarbe, false)
  216. );
  217. var erhalten = UnoRegeln.IstAblageStapelFarbeGleichZuLegendeKarte(_neueKarteFarbe);
  218. //assert
  219. Assert.Equal(_erwartet, erhalten);
  220. }
  221. [Theory]
  222. [InlineData(Kartenbezeichnung.Acht, Kartenbezeichnung.Acht, true)]
  223. [InlineData(Kartenbezeichnung.Eins, Kartenbezeichnung.Acht, false)]
  224. [InlineData(Kartenbezeichnung.Fuenf, Kartenbezeichnung.Vier, false)]
  225. [InlineData(Kartenbezeichnung.Sechs, Kartenbezeichnung.Sechs, true)]
  226. [InlineData(Kartenbezeichnung.Zwei, Kartenbezeichnung.Drei, false)]
  227. [InlineData(Kartenbezeichnung.Neun, Kartenbezeichnung.Acht, false)]
  228. private void IstAblageStapelZahlGleichZuLegendeKarteTest(Kartenbezeichnung ablegeStapelKarteBezeichnung, Kartenbezeichnung handStapelKarteBezeichnung, bool erwartet)
  229. {
  230. //arrange
  231. var _ablegeStapelKarteBezeichnung = ablegeStapelKarteBezeichnung.ToString();
  232. var _handStapelKarteBezeichnung = handStapelKarteBezeichnung.ToString();
  233. var _erwartet = erwartet;
  234. //act
  235. UnoRegeln.KartenAblageStapel.KartenModels = new();
  236. UnoRegeln.KartenAblageStapel.KartenModels.Add(
  237. BeispielKarte(_ablegeStapelKarteBezeichnung, Farbe.Blau.ToString(), false)
  238. );
  239. var erhalten = UnoRegeln.IstAblageStapelZahlGleichZuLegendeKarte(_handStapelKarteBezeichnung);
  240. //assert
  241. Assert.Equal(_erwartet, erhalten);
  242. }
  243. [Fact]
  244. private void ZiehEineKarteTest()
  245. {
  246. //arrange
  247. UnoRegeln.ZiehKartenStapelZusammenstellen();
  248. UnoRegeln.SpielerErstellen("Andrej");
  249. var erwartet = UnoRegeln.ZiehKartenStapel.KartenModels.FirstOrDefault();
  250. //act
  251. UnoRegeln.ZiehEineKarte(1);
  252. var erhalten = UnoRegeln.Spieler[0].KartenModels.LastOrDefault();
  253. //assert
  254. Assert.Equal(erwartet, erhalten);
  255. }
  256. [Theory]
  257. [InlineData(2, 0, 1)]
  258. [InlineData(3, 2, 0)]
  259. [InlineData(4, 2, 3)]
  260. [InlineData(5, 0, 1)]
  261. private void PlusZweiKarteAufStapelLegenTest(int anzahlSpieler, int aktuellerSpielerIndex, int naechsterSpielerIndex)
  262. {
  263. //arrange
  264. UnoRegeln.ZiehKartenStapelZusammenstellen();
  265. BeispielMultipleSpielerModelsFüllen(anzahlSpieler);
  266. foreach (var spieler in SpielerModels)
  267. {
  268. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  269. }
  270. var _aktuellerSpielerIndex = aktuellerSpielerIndex;
  271. var _naechsterSpielerIndex = naechsterSpielerIndex;
  272. var nachstenSpielerKartenAnzahlErwartet = UnoRegeln.Spieler[_naechsterSpielerIndex].KartenModels.Count + 2;
  273. var beispielZuLegendeKarte = BeispielKarte(Kartenbezeichnung.PlusZweiKarte.ToString(), Farbe.Gelb.ToString(), true);
  274. //act
  275. UnoRegeln.KarteAufStapelLegen(UnoRegeln.Spieler[_aktuellerSpielerIndex].SpielerModel.Id, beispielZuLegendeKarte);
  276. //assert
  277. Assert.Equal(nachstenSpielerKartenAnzahlErwartet, UnoRegeln.Spieler[_naechsterSpielerIndex].KartenModels.Count);
  278. }
  279. [Theory]
  280. [InlineData(4, 0, 3, true)]
  281. [InlineData(4, 0, 1, false)]
  282. [InlineData(4, 2, 3, false)]
  283. [InlineData(4, 3, 2, true)]
  284. [InlineData(3, 1, 2, false)]
  285. private void RetoureKarteAufStapelLegenTest(int anzahlSpieler, int aktuellerSpielerIndex, int naechsterSpielerIndex, bool uhrzeigerSinn)
  286. {
  287. //arrange
  288. UnoRegeln.ZiehKartenStapelZusammenstellen();
  289. BeispielMultipleSpielerModelsFüllen(anzahlSpieler);
  290. foreach (var spieler in SpielerModels)
  291. {
  292. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  293. }
  294. var erwartet = !uhrzeigerSinn;
  295. var _aktuellerSpielerIndex = aktuellerSpielerIndex;
  296. var beispielZuLegendeKarte = BeispielKarte(Kartenbezeichnung.RetoureKarte.ToString(), Farbe.Gelb.ToString(), true);
  297. //act
  298. UnoRegeln.Uhrzeigersinn = uhrzeigerSinn;
  299. UnoRegeln.KarteAufStapelLegen(UnoRegeln.Spieler[_aktuellerSpielerIndex].SpielerModel.Id, beispielZuLegendeKarte);
  300. //assert
  301. Assert.Equal(naechsterSpielerIndex, UnoRegeln.Spieler.FindIndex(x => x.SpielerModel.Id == UnoRegeln.NaechsterSpielerId));
  302. }
  303. #region Stapel erstellen
  304. [Theory]
  305. [InlineData((Kartenbezeichnung)2, Farbe.Gelb, false, 19)]
  306. [InlineData((Kartenbezeichnung)7, Farbe.Blau, false, 19)]
  307. [InlineData((Kartenbezeichnung)9, Farbe.Gruen, false, 19)]
  308. [InlineData((Kartenbezeichnung)4, Farbe.Rot, false, 19)]
  309. [InlineData((Kartenbezeichnung)5, Farbe.Blau, false, 19)]
  310. [InlineData((Kartenbezeichnung)9, Farbe.Gelb, false, 19)]
  311. [InlineData((Kartenbezeichnung)6, Farbe.Gruen, false, 19)]
  312. private void ErstelleStandardKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  313. {
  314. //arrange
  315. var _kartenbezeichnung = kartenbezeichnung.ToString();
  316. var _farbe = farbe.ToString();
  317. var _spezial = spezial;
  318. var _anzahl = anzahl;
  319. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  320. //act
  321. var neuesDeck = Uno.ErstelleStandardKarten();
  322. var anzahlBlau = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Blau.ToString())).Count();
  323. var anzahlRot = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Rot.ToString())).Count();
  324. var anzahlGruen = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gruen.ToString())).Count();
  325. var anzahlGelb = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gelb.ToString())).Count();
  326. //assert
  327. Assert.Equal(_anzahl, anzahlBlau);
  328. Assert.Equal(_anzahl, anzahlRot);
  329. Assert.Equal(_anzahl, anzahlGruen);
  330. Assert.Equal(_anzahl, anzahlGelb);
  331. Assert.Contains(neuesDeck.KartenModels, n =>
  332. n.Name.Equals(erwartet.Name) &&
  333. n.Farbe.Equals(erwartet.Farbe) &&
  334. n.Spezial == erwartet.Spezial
  335. );
  336. }
  337. [Theory]
  338. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Gelb, true, 6)]
  339. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Rot, true, 6)]
  340. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Gelb, true, 6)]
  341. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Blau, true, 6)]
  342. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Gruen, true, 6)]
  343. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Gelb, true, 6)]
  344. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Gruen, true, 6)]
  345. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Rot, true, 6)]
  346. private void ErstelleFarbigeSpezialKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  347. {
  348. //arrange
  349. var _kartenbezeichnung = kartenbezeichnung.ToString();
  350. var _farbe = farbe.ToString();
  351. var _spezial = spezial;
  352. var _anzahl = anzahl;
  353. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  354. //act
  355. var neuesDeck = Uno.ErstelleFarbigeSpezialKarten();
  356. var anzahlBlau = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Blau.ToString())).Count();
  357. var anzahlRot = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Rot.ToString())).Count();
  358. var anzahlGruen = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gruen.ToString())).Count();
  359. var anzahlGelb = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gelb.ToString())).Count();
  360. //assert
  361. Assert.Equal(_anzahl, anzahlBlau);
  362. Assert.Equal(_anzahl, anzahlRot);
  363. Assert.Equal(_anzahl, anzahlGruen);
  364. Assert.Equal(_anzahl, anzahlGelb);
  365. Assert.Contains(neuesDeck.KartenModels, n =>
  366. n.Name.Equals(erwartet.Name) &&
  367. n.Farbe.Equals(erwartet.Farbe) &&
  368. n.Spezial == erwartet.Spezial
  369. );
  370. }
  371. [Theory]
  372. [InlineData(Kartenbezeichnung.FarbwahlKarte, Farbe.Keine, true, 4)]
  373. [InlineData(Kartenbezeichnung.ZiehVierFarbenwahlkarte, Farbe.Keine, true, 4)]
  374. private void ErstelleJokerKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  375. {
  376. //arrange
  377. var _kartenbezeichnung = kartenbezeichnung.ToString();
  378. var _farbe = farbe.ToString();
  379. var _spezial = spezial;
  380. var _anzahl = anzahl;
  381. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  382. //act
  383. var neuesDeck = Uno.ErstelleJokerKarten();
  384. var ergebnisAnzahl = neuesDeck.KartenModels.Where(x => x.Name.Equals(kartenbezeichnung.ToString())).Count();
  385. //assert
  386. Assert.Equal(_anzahl, ergebnisAnzahl);
  387. Assert.Contains(neuesDeck.KartenModels, n =>
  388. n.Name.Equals(erwartet.Name) &&
  389. n.Farbe.Equals(erwartet.Farbe) &&
  390. n.Spezial == erwartet.Spezial
  391. );
  392. }
  393. [Fact]
  394. private void AblagestapelZusammenstellenTest()
  395. {
  396. UnoRegeln.ZiehKartenStapelZusammenstellen();
  397. var ergebnis = UnoRegeln.ZiehKartenStapel;
  398. Assert.Equal(108, ergebnis.KartenModels.Count());
  399. }
  400. #endregion
  401. }
  402. }