memoQProjectTest.py 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409
  1. import unittest
  2. import memoQProject
  3. import json
  4. import os
  5. class MemoQProjectTest(unittest.TestCase):
  6. """Tests for memoQProject module."""
  7. def __init__(self, *args, **kwargs):
  8. super(MemoQProjectTest, self).__init__(*args, **kwargs)
  9. with open("testFiles/testConfig.json") as json_file:
  10. self.config = json.load(json_file)
  11. def test_get_project_by_domain(self):
  12. """ Test for get_project_by_domain method."""
  13. test = memoQProject.MemoQProject()
  14. test.get_project_by_domain(self.config["valid_domain"])
  15. self.assertNotEqual(test.project.get_project_guid(),
  16. None, "Guid shouldn't be none!")
  17. test.get_project_by_domain(self.config["wrong_domain"])
  18. self.assertEqual(test.project.get_project_guid(),
  19. None, "Guid should be none!")
  20. def test_get_project_by_guid(self):
  21. """ Test for get_project_by_guid method."""
  22. test = memoQProject.MemoQProject()
  23. test.get_project_by_guid(self.config["valid_project_guid"])
  24. self.assertEqual(test.project.get_project_guid(),
  25. self.config["valid_project_guid"], "Guids don't match!")
  26. test.get_project_by_guid(self.config["wrong_project_guid"])
  27. self.assertEqual(test.project.get_project_guid(),
  28. None, "Guid should be none!")
  29. def test_template_project_options(self):
  30. """ Test for template_project_options method."""
  31. test = memoQProject.MemoQProject()
  32. options = test.template_project_options(
  33. self.config["project_template_guid"])
  34. self.assertIsNone(
  35. options, "Options should be None if source language not set!")
  36. test.project.languages.source = self.config["source_language"]
  37. options = test.template_project_options(
  38. self.config["project_template_guid"])
  39. fake_options = test.client.factory.create(
  40. '{http://kilgray.com/memoqservices/2007}TemplateBasedProjectCreateInfo')
  41. fake_options.TemplateGuid = self.config["project_template_guid"]
  42. fake_options.Name = test.project.name
  43. fake_options.SourceLanguageCode = test.project.languages.source
  44. fake_options.Domain = test.project.domain
  45. fake_options.CreatorUser = self.config["creator_guid"]
  46. self.assertEqual(options.Name, fake_options.Name,
  47. "Names should be equal!")
  48. self.assertEqual(options.TemplateGuid, fake_options.TemplateGuid,
  49. "Template guids should be equal!")
  50. self.assertEqual(options.Domain, fake_options.Domain,
  51. "Domains should be equal!")
  52. self.assertEqual(options.SourceLanguageCode, fake_options.SourceLanguageCode,
  53. "Source language codes should be equal!")
  54. def test_create_project_from_template(self):
  55. """ Test for create_project_from_template method."""
  56. test = memoQProject.MemoQProject()
  57. test.project.languages.source = self.config["source_language"]
  58. test.create_project_from_template(
  59. template_guid=self.config["project_template_guid"])
  60. self.assertNotEqual(test.project.get_project_guid(),
  61. None, "Guid shouldn't be none!")
  62. test.delete()
  63. # Testing override
  64. test.project.languages.target = self.config["target_languages"]
  65. options = test.template_project_options(
  66. self.config["project_template_guid"])
  67. options.Name += "_override"
  68. options.Domain = "override"
  69. test.create_project_from_template(options=options)
  70. self.assertNotEqual(test.project.get_project_guid(),
  71. None, "Guid shouldn't be none!")
  72. self.assertEqual(options.Domain, test.project.domain)
  73. self.assertEqual(
  74. self.config["target_languages"], test.project.languages.target)
  75. test.delete()
  76. def test_project_options(self):
  77. """ Test for project_options method."""
  78. test = memoQProject.MemoQProject()
  79. options = test.project_options()
  80. self.assertIsNone(
  81. options, "Options should be None if source language not set!")
  82. test.project.languages.source = self.config["source_language"]
  83. options = test.project_options()
  84. self.assertIsNone(
  85. options, "Options should be None if target languages not set!")
  86. test.project.languages.target = self.config["target_languages"]
  87. options = test.project_options()
  88. fake_options = test.client.factory.create(
  89. '{http://kilgray.com/memoqservices/2007}ServerProjectDesktopDocsCreateInfo')
  90. fake_options.Name = test.project.name
  91. fake_options.SourceLanguageCode = test.project.languages.source
  92. fake_options.TargetLanguageCodes.string = test.project.languages.target
  93. fake_options.Deadline = test.project.deadline
  94. fake_options.RecordVersionHistory = True
  95. fake_options.CreatorUser = self.config["creator_guid"]
  96. self.assertEqual(options.Name, fake_options.Name,
  97. "Names should be equal!")
  98. self.assertEqual(options.TargetLanguageCodes.string, fake_options.TargetLanguageCodes.string,
  99. "Target languages should be equal!")
  100. self.assertEqual(options.Deadline, fake_options.Deadline,
  101. "Deadlines should be equal!")
  102. self.assertEqual(options.SourceLanguageCode, fake_options.SourceLanguageCode,
  103. "Source language codes should be equal!")
  104. self.assertEqual(options.CreatorUser, fake_options.CreatorUser,
  105. "Creators should be equal!")
  106. def test_create_project(self):
  107. """ Test for create_project method."""
  108. test = memoQProject.MemoQProject()
  109. test.project.languages.source = self.config["source_language"]
  110. test.project.languages.target = self.config["target_languages"]
  111. test.create_project()
  112. self.assertNotEqual(test.project.get_project_guid(),
  113. None, "Guid shouldn't be none!")
  114. test.delete()
  115. # Testing override
  116. options = test.project_options()
  117. options.Name += "_override"
  118. options.Domain = "override"
  119. test.create_project(options=options)
  120. self.assertNotEqual(test.project.get_project_guid(),
  121. None, "Guid shouldn't be none!")
  122. self.assertEqual(options.Domain, test.project.domain)
  123. test.delete()
  124. def test_import_document(self):
  125. """ Test for import_document method."""
  126. test = memoQProject.MemoQProject()
  127. test.project.languages.source = self.config["source_language"]
  128. test.project.languages.target = self.config["target_languages"]
  129. test.create_project()
  130. self.assertNotEqual(test.project.get_project_guid(),
  131. None, "Guid shouldn't be none!")
  132. result = test.import_document(self.config["test_file_path"])
  133. self.assertTrue(result, "Result should be true!")
  134. test.delete()
  135. def test_get_project_documents(self):
  136. """ Test for get_project_documents method."""
  137. test = memoQProject.MemoQProject()
  138. test.project.languages.source = self.config["source_language"]
  139. test.project.languages.target = self.config["target_languages"]
  140. test.create_project()
  141. self.assertNotEqual(test.project.get_project_guid(),
  142. None, "Guid shouldn't be none!")
  143. result = test.import_document(self.config["test_file_path"])
  144. self.assertTrue(result, "Result should be true!")
  145. filename = os.path.basename(self.config["test_file_path"])
  146. test.get_project_documents()
  147. self.assertEqual(test.documents[0][0].DocumentName,
  148. filename, "Name of document doesn't match test filename!")
  149. test.delete()
  150. def test_export_documents(self):
  151. """ Test for export_documents method."""
  152. test = memoQProject.MemoQProject()
  153. test.project.languages.source = self.config["source_language"]
  154. test.project.languages.target = self.config["target_languages"]
  155. test.create_project()
  156. self.assertNotEqual(test.project.get_project_guid(),
  157. None, "Guid shouldn't be none!")
  158. result = test.import_document(self.config["test_file_path"])
  159. self.assertTrue(result, "Result should be true!")
  160. filename = os.path.basename(self.config["test_file_path"])
  161. test.get_project_documents()
  162. self.assertEqual(test.documents[0][0].DocumentName,
  163. filename, "Name of document doesn't match test filename!")
  164. export_result = test.export_documents(".")
  165. filepath = os.path.join(".", filename)
  166. self.assertTrue(export_result, "Export result should be true!")
  167. self.assertTrue(os.path.isfile(filepath), "File should exist!")
  168. os.remove(filepath)
  169. test.delete()
  170. def test_export_documents2(self):
  171. """ Test for export_documents2 method."""
  172. test = memoQProject.MemoQProject()
  173. test.project.languages.source = self.config["source_language"]
  174. test.project.languages.target = self.config["target_languages"]
  175. test.create_project()
  176. self.assertNotEqual(test.project.get_project_guid(),
  177. None, "Guid shouldn't be none!")
  178. result = test.import_document(self.config["test_file_path"])
  179. self.assertTrue(result, "Result should be true!")
  180. filename = os.path.basename(self.config["test_file_path"])
  181. test.get_project_documents()
  182. self.assertEqual(test.documents[0][0].DocumentName,
  183. filename, "Name of document doesn't match test filename!")
  184. export_result = test.export_documents2(".")
  185. filepath = os.path.join(".", filename)
  186. self.assertTrue(export_result, "Export result should be true!")
  187. self.assertTrue(os.path.isfile(filepath), "File should exist!")
  188. os.remove(filepath)
  189. test.delete()
  190. def test_statistics_options(self):
  191. """ Test for statistics_options method."""
  192. test = memoQProject.MemoQProject()
  193. fake_options = test.client.factory.create(
  194. '{http://kilgray.com/memoqservices/2007}StatisticsOptions')
  195. fake_options.Analysis_ProjectTMs = True
  196. fake_options.Analysis_Homogenity = True
  197. fake_options.ShowResultsPerFile = True
  198. fake_options.RepetitionPreferenceOver100 = True
  199. statistics_algorithm = test.client.factory.create(
  200. '{http://schemas.datacontract.org/2004/07/MemoQServices}StatisticsAlgorithm')
  201. fake_options.Algorithm.value = statistics_algorithm.MemoQ
  202. options = test.statistics_options()
  203. self.assertEqual(fake_options.Analysis_ProjectTMs, options.Analysis_ProjectTMs,
  204. "Project TMs option shouldn't be different!")
  205. self.assertEqual(fake_options.Analysis_Homogenity, options.Analysis_Homogenity,
  206. "Analysis Homogenity option shouldn't be different!")
  207. self.assertEqual(fake_options.Algorithm.value, options.Algorithm.value,
  208. "Algorithm value shouldn't be different!")
  209. def test_run_statistics(self):
  210. """ Test for run_statistics method."""
  211. test = memoQProject.MemoQProject()
  212. test.project.languages.source = self.config["source_language"]
  213. test.project.languages.target = self.config["target_languages"]
  214. test.create_project()
  215. self.assertNotEqual(test.project.get_project_guid(),
  216. None, "Guid shouldn't be none!")
  217. result = test.import_document(self.config["test_file_path"])
  218. self.assertTrue(result, "Result should be true!")
  219. statistics = test.run_statistics()
  220. self.assertNotEqual(statistics, None, "Statistics shouldn't be none!")
  221. # Testing override
  222. options = test.statistics_options()
  223. options.IncludeLockedRows = True
  224. statistics = test.run_statistics(options=options)
  225. self.assertNotEqual(statistics, None, "Statistics shouldn't be none!")
  226. test.delete()
  227. def test_save_statistics(self):
  228. """ Test for save_statistics method."""
  229. test = memoQProject.MemoQProject()
  230. test.project.languages.source = self.config["source_language"]
  231. test.project.languages.target = self.config["target_languages"]
  232. test.create_project()
  233. self.assertNotEqual(test.project.get_project_guid(),
  234. None, "Guid shouldn't be none!")
  235. result = test.import_document(self.config["test_file_path"])
  236. self.assertTrue(result, "Result should be true!")
  237. test.save_statistics(".", statistics=test.run_statistics())
  238. csv_files = [x for x in os.listdir(
  239. ".") if os.path.isfile(x) and ".csv" in x]
  240. self.assertTrue(len(csv_files), "File should exist!")
  241. for csv in csv_files:
  242. os.remove(csv)
  243. # Testing override
  244. options = test.statistics_options()
  245. options.IncludeLockedRows = True
  246. test.save_statistics(".", options=options)
  247. csv_files = [x for x in os.listdir(
  248. ".") if os.path.isfile(x) and ".csv" in x]
  249. self.assertTrue(len(csv_files), "File should exist!")
  250. for csv in csv_files:
  251. os.remove(csv)
  252. test.delete()
  253. def test_pretranslate_options(self):
  254. """ Test for pretranslate_options method."""
  255. test = memoQProject.MemoQProject()
  256. fake_options = test.client.factory.create(
  257. '{http://kilgray.com/memoqservices/2007}PretranslateOptions')
  258. lookup_behavior = test.client.factory.create(
  259. '{http://schemas.datacontract.org/2004/07/MemoQServices}PretranslateLookupBehavior')
  260. fake_options.PretranslateLookupBehavior.value = lookup_behavior.GoodMatch
  261. fake_options.GoodMatchRate = 80
  262. fake_options.LockPretranslated = True
  263. options = test.pretranslate_options()
  264. self.assertEqual(
  265. fake_options.PretranslateLookupBehavior.value, options.PretranslateLookupBehavior.value,
  266. "Lookup behavior option shouldn't be different!")
  267. self.assertEqual(fake_options.GoodMatchRate, options.GoodMatchRate,
  268. "Good Match option shouldn't be different!")
  269. self.assertEqual(fake_options.LockPretranslated, options.LockPretranslated,
  270. "Lock Pretranslated options shouldn't be different!")
  271. def test_pretranslate_project(self):
  272. """ Test for pretranslate_project method."""
  273. test = memoQProject.MemoQProject()
  274. test.project.languages.source = self.config["source_language"]
  275. test.create_project_from_template(
  276. template_guid=self.config["project_template_guid"])
  277. self.assertNotEqual(test.project.get_project_guid(),
  278. None, "Guid shouldn't be none!")
  279. result = test.import_document(self.config["test_file_path"])
  280. self.assertTrue(result, "Result should be true!")
  281. self.assertTrue(test.pretranslate_project(),
  282. "Pre-translation shouldn't return false!")
  283. test.delete()
  284. # Testing override
  285. test = memoQProject.MemoQProject()
  286. test.project.languages.source = self.config["source_language"]
  287. test.create_project_from_template(
  288. template_guid=self.config["project_template_guid"])
  289. self.assertNotEqual(test.project.get_project_guid(),
  290. None, "Guid shouldn't be none!")
  291. result = test.import_document(self.config["test_file_path"])
  292. self.assertTrue(result, "Result should be true!")
  293. options = test.pretranslate_options()
  294. options.GoodMatchRate = 90
  295. self.assertTrue(test.pretranslate_project(options=options),
  296. "Pre-translation shouldn't return false!")
  297. test.delete()
  298. def test_delete(self):
  299. """ Test for delete method."""
  300. test = memoQProject.MemoQProject()
  301. test.project.languages.source = self.config["source_language"]
  302. test.project.languages.target = self.config["target_languages"]
  303. test.create_project()
  304. self.assertNotEqual(test.project.get_project_guid(),
  305. None, "Guid shouldn't be none!")
  306. guid = test.project.get_project_guid()
  307. test.delete()
  308. test.get_project_by_guid(guid)
  309. self.assertNotEqual(test.project.get_project_guid(),
  310. guid, "Guids don't match!")
  311. if __name__ == "__main__":
  312. unittest.main()