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.

510 lines
17 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.AblageKartenStapel.KartenModels = new();
  214. UnoRegeln.AblageKartenStapel.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.AblageKartenStapel.KartenModels = new();
  236. UnoRegeln.AblageKartenStapel.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. Assert.DoesNotContain(UnoRegeln.Spieler[_naechsterSpielerIndex].KartenModels[0], UnoRegeln.ZiehKartenStapel.KartenModels);
  279. Assert.DoesNotContain(UnoRegeln.Spieler[_naechsterSpielerIndex].KartenModels[1], UnoRegeln.ZiehKartenStapel.KartenModels);
  280. }
  281. [Theory]
  282. [InlineData(4, 0, 3, true)]
  283. [InlineData(4, 0, 1, false)]
  284. [InlineData(4, 2, 3, false)]
  285. [InlineData(4, 3, 2, true)]
  286. [InlineData(3, 1, 2, false)]
  287. private void RetoureKarteAufStapelLegenTest(int anzahlSpieler, int aktuellerSpielerIndex, int naechsterSpielerIndex, bool uhrzeigerSinn)
  288. {
  289. //arrange
  290. UnoRegeln.ZiehKartenStapelZusammenstellen();
  291. BeispielMultipleSpielerModelsFüllen(anzahlSpieler);
  292. foreach (var spieler in SpielerModels)
  293. {
  294. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  295. }
  296. var erwartet = !uhrzeigerSinn;
  297. var _aktuellerSpielerIndex = aktuellerSpielerIndex;
  298. var beispielZuLegendeKarte = BeispielKarte(Kartenbezeichnung.RetoureKarte.ToString(), Farbe.Gelb.ToString(), true);
  299. //act
  300. UnoRegeln.Uhrzeigersinn = uhrzeigerSinn;
  301. UnoRegeln.KarteAufStapelLegen(UnoRegeln.Spieler[_aktuellerSpielerIndex].SpielerModel.Id, beispielZuLegendeKarte);
  302. //assert
  303. Assert.Equal(naechsterSpielerIndex, UnoRegeln.Spieler.FindIndex(x => x.SpielerModel.Id == UnoRegeln.NaechsterSpielerId));
  304. }
  305. [Theory]
  306. [InlineData(4, 1, 3, true)]
  307. private void AussetzenKarteAufStapelLegenTest(int anzahlSpieler, int aktuellerSpielerIndex, int naechsterSpielerIndex, bool uhrzeigerSinn)
  308. {
  309. //arrange
  310. UnoRegeln.ZiehKartenStapelZusammenstellen();
  311. BeispielMultipleSpielerModelsFüllen(anzahlSpieler);
  312. foreach (var spieler in SpielerModels)
  313. {
  314. UnoRegeln.SpielerErstellen(spieler.SpielerName);
  315. }
  316. var erwartetNaechsterSpielerIndex = naechsterSpielerIndex;
  317. var _aktuellerSpielerIndex = aktuellerSpielerIndex;
  318. var beispielZuLegendeKarte = BeispielKarte(Kartenbezeichnung.AussetzenKarte.ToString(), Farbe.Rot.ToString(), true);
  319. UnoRegeln.Uhrzeigersinn = uhrzeigerSinn;
  320. //act
  321. UnoRegeln.KarteAufStapelLegen(UnoRegeln.Spieler[_aktuellerSpielerIndex].SpielerModel.Id, beispielZuLegendeKarte);
  322. //assert
  323. Assert.Equal(erwartetNaechsterSpielerIndex, UnoRegeln.Spieler.FindIndex(x => x.SpielerModel.Id == UnoRegeln.NaechsterSpielerId));
  324. }
  325. #region Stapel erstellen
  326. [Theory]
  327. [InlineData((Kartenbezeichnung)0, Farbe.Rot, false, 19)]
  328. [InlineData((Kartenbezeichnung)1, Farbe.Rot, false, 19)]
  329. [InlineData((Kartenbezeichnung)2, Farbe.Gelb, false, 19)]
  330. [InlineData((Kartenbezeichnung)3, Farbe.Gruen, false, 19)]
  331. [InlineData((Kartenbezeichnung)4, Farbe.Rot, false, 19)]
  332. [InlineData((Kartenbezeichnung)5, Farbe.Blau, false, 19)]
  333. [InlineData((Kartenbezeichnung)6, Farbe.Gruen, false, 19)]
  334. [InlineData((Kartenbezeichnung)7, Farbe.Blau, false, 19)]
  335. [InlineData((Kartenbezeichnung)8, Farbe.Gruen, false, 19)]
  336. [InlineData((Kartenbezeichnung)9, Farbe.Gelb, false, 19)]
  337. private void ErstelleStandardKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  338. {
  339. //arrange
  340. var _kartenbezeichnung = kartenbezeichnung.ToString();
  341. var _farbe = farbe.ToString();
  342. var _spezial = spezial;
  343. var _anzahl = anzahl;
  344. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  345. //act
  346. var neuesDeck = Uno.ErstelleStandardKarten();
  347. var anzahlBlau = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Blau.ToString())).Count();
  348. var anzahlRot = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Rot.ToString())).Count();
  349. var anzahlGruen = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gruen.ToString())).Count();
  350. var anzahlGelb = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gelb.ToString())).Count();
  351. //assert
  352. Assert.Equal(_anzahl, anzahlBlau);
  353. Assert.Equal(_anzahl, anzahlRot);
  354. Assert.Equal(_anzahl, anzahlGruen);
  355. Assert.Equal(_anzahl, anzahlGelb);
  356. Assert.Contains(neuesDeck.KartenModels, n =>
  357. n.Name.Equals(erwartet.Name) &&
  358. n.Farbe.Equals(erwartet.Farbe) &&
  359. n.Spezial == erwartet.Spezial
  360. );
  361. }
  362. [Theory]
  363. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Gelb, true, 6)]
  364. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Blau, true, 6)]
  365. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Gruen, true, 6)]
  366. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Rot, true, 6)]
  367. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Gelb, true, 6)]
  368. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Blau, true, 6)]
  369. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Gruen, true, 6)]
  370. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Rot, true, 6)]
  371. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Gelb, true, 6)]
  372. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Blau, true, 6)]
  373. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Gruen, true, 6)]
  374. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Rot, true, 6)]
  375. private void ErstelleFarbigeSpezialKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  376. {
  377. //arrange
  378. var _kartenbezeichnung = kartenbezeichnung.ToString();
  379. var _farbe = farbe.ToString();
  380. var _spezial = spezial;
  381. var _anzahl = anzahl;
  382. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  383. //act
  384. var neuesDeck = Uno.ErstelleFarbigeSpezialKarten();
  385. var anzahlBlau = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Blau.ToString())).Count();
  386. var anzahlRot = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Rot.ToString())).Count();
  387. var anzahlGruen = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gruen.ToString())).Count();
  388. var anzahlGelb = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gelb.ToString())).Count();
  389. //assert
  390. Assert.Equal(_anzahl, anzahlBlau);
  391. Assert.Equal(_anzahl, anzahlRot);
  392. Assert.Equal(_anzahl, anzahlGruen);
  393. Assert.Equal(_anzahl, anzahlGelb);
  394. Assert.Contains(neuesDeck.KartenModels, n =>
  395. n.Name.Equals(erwartet.Name) &&
  396. n.Farbe.Equals(erwartet.Farbe) &&
  397. n.Spezial == erwartet.Spezial
  398. );
  399. }
  400. [Theory]
  401. [InlineData(Kartenbezeichnung.FarbwahlKarte, Farbe.Keine, true, 4)]
  402. [InlineData(Kartenbezeichnung.ZiehVierFarbenwahlkarte, Farbe.Keine, true, 4)]
  403. private void ErstelleJokerKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  404. {
  405. //arrange
  406. var _kartenbezeichnung = kartenbezeichnung.ToString();
  407. var _farbe = farbe.ToString();
  408. var _spezial = spezial;
  409. var _anzahl = anzahl;
  410. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  411. //act
  412. var neuesDeck = Uno.ErstelleJokerKarten();
  413. var ergebnisAnzahl = neuesDeck.KartenModels.Where(x => x.Name.Equals(kartenbezeichnung.ToString())).Count();
  414. //assert
  415. Assert.Equal(_anzahl, ergebnisAnzahl);
  416. Assert.Contains(neuesDeck.KartenModels, n =>
  417. n.Name.Equals(erwartet.Name) &&
  418. n.Farbe.Equals(erwartet.Farbe) &&
  419. n.Spezial == erwartet.Spezial
  420. );
  421. }
  422. [Fact]
  423. private void AblagestapelZusammenstellenTest()
  424. {
  425. UnoRegeln.ZiehKartenStapelZusammenstellen();
  426. var ergebnis = UnoRegeln.ZiehKartenStapel;
  427. Assert.Equal(108, ergebnis.KartenModels.Count());
  428. }
  429. #endregion
  430. }
  431. }