studio.spec.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. describe("Studio", () => {
  2. beforeEach(() => {
  3. cy.viewport(1000, 600);
  4. cy.intercept(
  5. {
  6. method: "GET",
  7. url: "/airboardgame/auth/check",
  8. },
  9. // eslint-disable-next-line quotes
  10. '{"message":"success"}'
  11. );
  12. cy.intercept(
  13. {
  14. method: "GET",
  15. url: "/airboardgame/store/game*",
  16. },
  17. // eslint-disable-next-line quotes
  18. "[]"
  19. );
  20. cy.visit("/", {
  21. onBeforeLoad: (win) => {
  22. win.localStorage.setItem("isAuthenticated", "true");
  23. },
  24. });
  25. cy.contains("Studio").click();
  26. });
  27. it("Can see add game button", () => {
  28. cy.contains("Add a game");
  29. });
  30. it("Can access new game creation", () => {
  31. cy.get("[title^='Add a game']").click();
  32. cy.get(".board-pane").should(
  33. "have.css",
  34. "transform",
  35. "matrix(0.24, 0, 0, 0.24, 260, 60)"
  36. );
  37. });
  38. it("Can create empty game", () => {
  39. cy.get("[title^='Add a game']").click();
  40. cy.get(".board-pane").should(
  41. "have.css",
  42. "transform",
  43. "matrix(0.24, 0, 0, 0.24, 260, 60)"
  44. );
  45. // save
  46. cy.intercept(
  47. {
  48. method: "POST",
  49. url: "/airboardgame/store/game/*",
  50. },
  51. // eslint-disable-next-line quotes
  52. (req) => {
  53. expect(req.body.items.length).to.equal(0);
  54. req.reply(req.body);
  55. }
  56. );
  57. cy.get("[title^='Save']").click();
  58. cy.get("button").contains("Save").click();
  59. });
  60. it("Can create basic game", () => {
  61. cy.get("[title^='Add a game']").click();
  62. cy.get(".board-pane").should(
  63. "have.css",
  64. "transform",
  65. "matrix(0.24, 0, 0, 0.24, 260, 60)"
  66. );
  67. // Add an item
  68. cy.get("[title^='Add an item']").click();
  69. cy.contains("Rectangle").parent().parent().click();
  70. cy.get(".side-panel.open [alt^='Close']").click();
  71. // save
  72. cy.intercept(
  73. {
  74. method: "POST",
  75. url: "/airboardgame/store/game/*",
  76. },
  77. // eslint-disable-next-line quotes
  78. (req) => {
  79. expect(req.body.items.length).to.equal(1);
  80. expect(req.body.items[0].type).to.equal("rect");
  81. req.reply(req.body);
  82. }
  83. );
  84. cy.get("[title^='Save']").click();
  85. cy.get("button").contains("Save").click();
  86. });
  87. it("Can edit game properties", () => {
  88. cy.get("[title^='Add a game']").click();
  89. cy.get(".board-pane").should(
  90. "have.css",
  91. "transform",
  92. "matrix(0.24, 0, 0, 0.24, 260, 60)"
  93. );
  94. // Edit title
  95. cy.get("[title^='Configuration']").click();
  96. cy.get('input[name="defaultName"]').clear().type("ChangeGameName");
  97. cy.get(".side-panel.open [alt^='Close']").click();
  98. cy.contains("ChangeGameName");
  99. cy.intercept(
  100. {
  101. method: "POST",
  102. url: "/airboardgame/store/game/*",
  103. },
  104. // eslint-disable-next-line quotes
  105. (req) => {
  106. expect(req.body.board.defaultName).to.equal("ChangeGameName");
  107. req.reply(req.body);
  108. }
  109. );
  110. cy.get("[title^='Save']").click();
  111. cy.get("button").contains("Save").click();
  112. });
  113. describe("Item edition", () => {
  114. beforeEach(() => {
  115. cy.get("[title^='Add a game']").click();
  116. cy.get(".board-pane").should(
  117. "have.css",
  118. "transform",
  119. "matrix(0.24, 0, 0, 0.24, 260, 60)"
  120. );
  121. // Add an item
  122. cy.get("[title^='Add an item']").click();
  123. cy.contains("Rectangle").parent().parent().click();
  124. cy.get(".side-panel.open [alt^='Close']").click();
  125. });
  126. it("Can update item properties", () => {
  127. cy.get(".item").click({ force: true });
  128. cy.get("button img[alt^='Edit']").click({ force: true });
  129. cy.get('input[name="width"]').clear().type("100");
  130. cy.get('input[name="height"]').clear().type("75");
  131. cy.get('input[name="text"]').clear().type("myCube");
  132. cy.get(".item")
  133. .children()
  134. .first()
  135. .should((elt) => {
  136. const { clientWidth, clientHeight } = elt[0];
  137. expect(clientWidth).to.equal(100);
  138. expect(clientHeight).to.equal(75);
  139. });
  140. cy.get(".item").contains("myCube");
  141. });
  142. it("Can lock an item", () => {
  143. cy.get(".item").click({ force: true });
  144. cy.get("button img[alt^='Edit']").click({ force: true });
  145. cy.get('input[name="locked"]').click();
  146. cy.get(".item").should("have.class", "locked");
  147. cy.contains("New").click();
  148. cy.get(".item").click({ force: true });
  149. cy.get(".item").should("not.have.class", "selected");
  150. cy.get(".item").dblclick({ force: true });
  151. cy.contains("Hint");
  152. cy.wait(1000);
  153. // long press to unlock
  154. cy.get(".item").trigger("pointerdown", { force: true });
  155. cy.wait(1100);
  156. cy.get(".item").trigger("pointerup", { force: true });
  157. cy.get(".item").should("have.class", "selected");
  158. });
  159. it("Can change item layer", () => {
  160. cy.get(".item").click({ force: true });
  161. cy.get("button img[alt^='Edit']").click({ force: true });
  162. cy.get(".item").parent().should("have.css", "z-index", "140");
  163. cy.get(".slider-layer .rc-slider-mark-text").contains("-1").click();
  164. cy.get(".item").parent().should("have.css", "z-index", "130");
  165. });
  166. });
  167. });
  168. /* TODO
  169. - rotation
  170. - layer
  171. - actions
  172. - Items
  173. */