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.

445 lines
14 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. #region Stapel erstellen
  280. [Theory]
  281. [InlineData((Kartenbezeichnung)2, Farbe.Gelb, false, 19)]
  282. [InlineData((Kartenbezeichnung)7, Farbe.Blau, false, 19)]
  283. [InlineData((Kartenbezeichnung)9, Farbe.Gruen, false, 19)]
  284. [InlineData((Kartenbezeichnung)4, Farbe.Rot, false, 19)]
  285. [InlineData((Kartenbezeichnung)5, Farbe.Blau, false, 19)]
  286. [InlineData((Kartenbezeichnung)9, Farbe.Gelb, false, 19)]
  287. [InlineData((Kartenbezeichnung)6, Farbe.Gruen, false, 19)]
  288. private void ErstelleStandardKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  289. {
  290. //arrange
  291. var _kartenbezeichnung = kartenbezeichnung.ToString();
  292. var _farbe = farbe.ToString();
  293. var _spezial = spezial;
  294. var _anzahl = anzahl;
  295. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  296. //act
  297. var neuesDeck = Uno.ErstelleStandardKarten();
  298. var anzahlBlau = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Blau.ToString())).Count();
  299. var anzahlRot = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Rot.ToString())).Count();
  300. var anzahlGruen = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gruen.ToString())).Count();
  301. var anzahlGelb = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gelb.ToString())).Count();
  302. //assert
  303. Assert.Equal(_anzahl, anzahlBlau);
  304. Assert.Equal(_anzahl, anzahlRot);
  305. Assert.Equal(_anzahl, anzahlGruen);
  306. Assert.Equal(_anzahl, anzahlGelb);
  307. Assert.Contains(neuesDeck.KartenModels, n =>
  308. n.Name.Equals(erwartet.Name) &&
  309. n.Farbe.Equals(erwartet.Farbe) &&
  310. n.Spezial == erwartet.Spezial
  311. );
  312. }
  313. [Theory]
  314. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Gelb, true, 6)]
  315. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Rot, true, 6)]
  316. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Gelb, true, 6)]
  317. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Blau, true, 6)]
  318. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Gruen, true, 6)]
  319. [InlineData(Kartenbezeichnung.RetoureKarte, Farbe.Gelb, true, 6)]
  320. [InlineData(Kartenbezeichnung.AussetzenKarte, Farbe.Gruen, true, 6)]
  321. [InlineData(Kartenbezeichnung.PlusZweiKarte, Farbe.Rot, true, 6)]
  322. private void ErstelleFarbigeSpezialKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  323. {
  324. //arrange
  325. var _kartenbezeichnung = kartenbezeichnung.ToString();
  326. var _farbe = farbe.ToString();
  327. var _spezial = spezial;
  328. var _anzahl = anzahl;
  329. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  330. //act
  331. var neuesDeck = Uno.ErstelleFarbigeSpezialKarten();
  332. var anzahlBlau = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Blau.ToString())).Count();
  333. var anzahlRot = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Rot.ToString())).Count();
  334. var anzahlGruen = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gruen.ToString())).Count();
  335. var anzahlGelb = neuesDeck.KartenModels.Where(x => x.Farbe.Equals(Farbe.Gelb.ToString())).Count();
  336. //assert
  337. Assert.Equal(_anzahl, anzahlBlau);
  338. Assert.Equal(_anzahl, anzahlRot);
  339. Assert.Equal(_anzahl, anzahlGruen);
  340. Assert.Equal(_anzahl, anzahlGelb);
  341. Assert.Contains(neuesDeck.KartenModels, n =>
  342. n.Name.Equals(erwartet.Name) &&
  343. n.Farbe.Equals(erwartet.Farbe) &&
  344. n.Spezial == erwartet.Spezial
  345. );
  346. }
  347. [Theory]
  348. [InlineData(Kartenbezeichnung.FarbwahlKarte, Farbe.Keine, true, 4)]
  349. [InlineData(Kartenbezeichnung.ZiehVierFarbenwahlkarte, Farbe.Keine, true, 4)]
  350. private void ErstelleJokerKartenTest(Kartenbezeichnung kartenbezeichnung, Farbe farbe, bool spezial, int anzahl)
  351. {
  352. //arrange
  353. var _kartenbezeichnung = kartenbezeichnung.ToString();
  354. var _farbe = farbe.ToString();
  355. var _spezial = spezial;
  356. var _anzahl = anzahl;
  357. var erwartet = BeispielKarte(_kartenbezeichnung, _farbe, _spezial);
  358. //act
  359. var neuesDeck = Uno.ErstelleJokerKarten();
  360. var ergebnisAnzahl = neuesDeck.KartenModels.Where(x => x.Name.Equals(kartenbezeichnung.ToString())).Count();
  361. //assert
  362. Assert.Equal(_anzahl, ergebnisAnzahl);
  363. Assert.Contains(neuesDeck.KartenModels, n =>
  364. n.Name.Equals(erwartet.Name) &&
  365. n.Farbe.Equals(erwartet.Farbe) &&
  366. n.Spezial == erwartet.Spezial
  367. );
  368. }
  369. [Fact]
  370. private void AblagestapelZusammenstellenTest()
  371. {
  372. UnoRegeln.ZiehKartenStapelZusammenstellen();
  373. var ergebnis = UnoRegeln.ZiehKartenStapel;
  374. Assert.Equal(108, ergebnis.KartenModels.Count());
  375. }
  376. #endregion
  377. }
  378. }