keys.spec.ts 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. require("../setup");
  2. import { expect } from "chai";
  3. import { Cassettes } from "mocha-cassettes";
  4. import { LokaliseApi, KeyParamsWithPagination } from "../../src/main";
  5. describe("Keys", function () {
  6. const cassette = new Cassettes("./test/cassettes");
  7. const lokaliseApi = new LokaliseApi({ apiKey: process.env.API_KEY });
  8. const project_id = "803826145ba90b42d5d860.46800099";
  9. const key_id = 15519786;
  10. const second_key_id = 15814906;
  11. cassette
  12. .createTest("list", async () => {
  13. const params: KeyParamsWithPagination = { project_id: project_id };
  14. const keys = await lokaliseApi.keys().list(params);
  15. expect(keys.items[0].key_id).to.eq(key_id);
  16. })
  17. .register(this);
  18. cassette
  19. .createTest("list_pagination", async () => {
  20. const keys = await lokaliseApi.keys().list({
  21. project_id: project_id,
  22. page: 2,
  23. limit: 3,
  24. });
  25. expect(keys.items[0].key_id).to.eq(15814906);
  26. expect(keys.totalResults).to.eq(21);
  27. expect(keys.totalPages).to.eq(7);
  28. expect(keys.resultsPerPage).to.eq(3);
  29. expect(keys.currentPage).to.eq(2);
  30. })
  31. .register(this);
  32. cassette
  33. .createTest("get", async () => {
  34. const key = await lokaliseApi.keys().get(44596066, {
  35. project_id: project_id,
  36. disable_references: 1,
  37. });
  38. expect(key.key_id).to.eq(44596066);
  39. expect(key.created_at).to.eq("2020-05-11 11:20:33 (Etc/UTC)");
  40. expect(key.created_at_timestamp).to.eq(1589196033);
  41. expect(key.key_name.ios).to.eq("static_pages:index:welcome");
  42. expect(key.filenames.web).to.eq("%LANG_ISO%.yml");
  43. expect(key.description).to.eq("");
  44. expect(key.platforms).to.include("web");
  45. expect(key.tags).to.have.lengthOf(0);
  46. expect(key.comments).to.have.lengthOf(0);
  47. expect(key.screenshots).to.have.lengthOf(0);
  48. expect(key.translations[0].words).to.eq(2);
  49. expect(key.is_plural).to.be.false;
  50. expect(key.plural_name).to.eq("");
  51. expect(key.is_hidden).to.be.true;
  52. expect(key.is_archived).to.be.false;
  53. expect(key.context).to.eq("");
  54. expect(key.base_words).to.eq(1);
  55. expect(key.char_limit).to.eq(0);
  56. expect(key.custom_attributes).to.eq("");
  57. expect(key.modified_at).to.eq("2020-05-11 11:20:33 (Etc/UTC)");
  58. expect(key.modified_at_timestamp).to.eq(1589196033);
  59. expect(key.translations_modified_at).to.eq(
  60. "2020-05-15 10:44:42 (Etc/UTC)"
  61. );
  62. expect(key.translations_modified_at_timestamp).to.eq(1589539482);
  63. })
  64. .register(this);
  65. cassette
  66. .createTest("create", async () => {
  67. const keys = await lokaliseApi.keys().create(
  68. {
  69. keys: [
  70. {
  71. key_name: "welcome_web",
  72. description: "Index app welcome",
  73. platforms: ["web"],
  74. filenames: {
  75. web: "my_filename.json",
  76. },
  77. translations: [
  78. {
  79. language_iso: "en",
  80. translation: "Welcome",
  81. },
  82. ],
  83. },
  84. {
  85. key_name: "welcome_ios",
  86. description: "Welcome apple",
  87. platforms: ["ios"],
  88. is_plural: true,
  89. translations: [
  90. {
  91. language_iso: "en",
  92. translation: {
  93. one: "I have one apple",
  94. other: "I have a lot of apples",
  95. },
  96. },
  97. ],
  98. },
  99. ],
  100. },
  101. { project_id: project_id }
  102. );
  103. expect(keys.items[0].key_name["web"]).to.eq("welcome_web");
  104. expect(keys.items[0].platforms).to.include("web");
  105. expect(keys.items[0].filenames["web"]).to.eq("my_filename.json");
  106. expect(keys.items[0].translations[1].translation).to.eq("Welcome");
  107. expect(keys.items[1].key_name["ios"]).to.eq("welcome_ios");
  108. expect(keys.items[1].platforms).to.include("ios");
  109. expect(keys.items[1].translations[1].language_iso).to.eq("en");
  110. })
  111. .register(this);
  112. cassette
  113. .createTest("create_with_error", async () => {
  114. const keys = await lokaliseApi.keys().create(
  115. {
  116. keys: [
  117. {
  118. key_name: "searching:results:nothing_found",
  119. description: "this is a duplicate",
  120. platforms: ["web"],
  121. filenames: {
  122. web: "%LANG_ISO%.yml",
  123. },
  124. translations: [
  125. {
  126. language_iso: "en",
  127. translation: "duplicate",
  128. },
  129. ],
  130. },
  131. {
  132. key_name: "key_not_dup",
  133. platforms: ["web"],
  134. translations: [
  135. {
  136. language_iso: "en",
  137. translation: "Not duplicate!",
  138. },
  139. ],
  140. },
  141. ],
  142. },
  143. { project_id: project_id }
  144. );
  145. expect(keys.errors[0].message).to.eq("This key name is already taken");
  146. expect(keys.items[0].key_name.ios).to.eq("key_not_dup");
  147. })
  148. .register(this);
  149. cassette
  150. .createTest("create per-platform", async () => {
  151. const keys = await lokaliseApi.keys().create(
  152. {
  153. keys: [
  154. {
  155. key_name: {
  156. ios: "name_for_ios",
  157. web: "name_for_web",
  158. android: "android_name",
  159. other: "other_name",
  160. },
  161. platforms: ["web", "ios"],
  162. translations: [
  163. {
  164. language_iso: "en",
  165. translation: "Per-platform key names",
  166. },
  167. ],
  168. },
  169. ],
  170. },
  171. { project_id: project_id }
  172. );
  173. const key = keys.items[0];
  174. expect(key.key_name["web"]).to.eq("name_for_web");
  175. expect(key.key_name["ios"]).to.eq("name_for_ios");
  176. expect(key.platforms).to.include("web", "ios");
  177. expect(key.platforms).not.to.include("android", "other");
  178. })
  179. .register(this);
  180. cassette
  181. .createTest("update", async () => {
  182. const key = await lokaliseApi.keys().update(
  183. key_id,
  184. {
  185. platforms: ["web", "other"],
  186. description: "Node updated",
  187. },
  188. { project_id: project_id }
  189. );
  190. expect(key.key_id).to.eq(key_id);
  191. expect(key.platforms).to.include("web", "other");
  192. expect(key.description).to.eq("Node updated");
  193. })
  194. .register(this);
  195. cassette
  196. .createTest("bulk_update", async () => {
  197. const keys = await lokaliseApi.keys().bulk_update(
  198. {
  199. keys: [
  200. {
  201. key_id: key_id,
  202. description: "Bulk node",
  203. platforms: ["web"],
  204. },
  205. {
  206. key_id: second_key_id,
  207. description: "Second bulk",
  208. },
  209. ],
  210. },
  211. { project_id: project_id }
  212. );
  213. expect(keys.items[0].key_id).to.eq(key_id);
  214. expect(keys.items[0].description).to.eq("Bulk node");
  215. expect(keys.items[0].platforms).to.include("web");
  216. expect(keys.items[0].platforms).not.to.include("other");
  217. expect(keys.items[1].key_id).to.eq(second_key_id);
  218. expect(keys.items[1].description).to.eq("Second bulk");
  219. expect(keys.errors.length).to.eq(0);
  220. })
  221. .register(this);
  222. cassette
  223. .createTest("delete", async () => {
  224. const response = await lokaliseApi.keys().delete(23677306, {
  225. project_id: project_id,
  226. });
  227. expect(response.project_id).to.eq(project_id);
  228. expect(response.key_removed).to.be.true;
  229. expect(response.keys_locked).to.eq(0);
  230. })
  231. .register(this);
  232. cassette
  233. .createTest("bulk_delete", async () => {
  234. const response = await lokaliseApi.keys().bulk_delete([23646011], {
  235. project_id: project_id,
  236. });
  237. expect(response.project_id).to.eq(project_id);
  238. expect(response.keys_removed).to.be.true;
  239. expect(response.keys_locked).to.eq(0);
  240. })
  241. .register(this);
  242. });