conftest.py 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609
  1. import pytest
  2. from datetime import timedelta
  3. from unittest import mock
  4. from werkzeug.security import generate_password_hash
  5. from stor import create_app, db
  6. from stor.auth.models import Group, User
  7. from stor.repository.definitions import (
  8. Dsi, EcResourceStatus, EcSharingLevel, FundingType, LicenceConditionType,
  9. LicenceType, LingualityType, LocalResourceStatus, LocalSharingLevel, MultilingualityType, SizeUnit, Theme
  10. )
  11. from stor.repository.models import (
  12. FundingProject, Licence, LicenceCondition, LicenceText, Resource, ResourceAttribution, ResourceDescription,
  13. ResourceDsi, ResourceFileInfo, ResourceFileLanguage, ResourceIprHolder, ResourceStat, ResourceTheme, ResourceTitle
  14. )
  15. PASS = "Password123!"
  16. PASS_HASH = generate_password_hash(PASS)
  17. class TestingConfig():
  18. CONTACT_EMAIL = "stor@test.com"
  19. DOC_URL = "http://127.0.0.1:5001/doc"
  20. ELASTICSEARCH_URL = None
  21. EMAIL_VERIFICATION_TOKEN_EXPIRY = 3
  22. LANGUAGES = {"en" : "English", "ga" : "Gaeilge"}
  23. PASSWORD_RESET_TOKEN_EXPIRY = 3
  24. PERMANENT_SESSION_LIFETIME = timedelta(minutes=2)
  25. PLATFORM_NAME = "STÓR"
  26. PRIMARY_METADATA_LANGUAGE = "en"
  27. PROJECTS_PER_PAGE = 12
  28. RESOURCES_PER_PAGE_EDITOR = 4
  29. RESOURCES_PER_PAGE_REPOSITORY = 3
  30. SECRET_KEY = "test"
  31. SQLALCHEMY_DATABASE_URI = "sqlite:///:memory:"
  32. SQLALCHEMY_TRACK_MODIFICATIONS = False
  33. TESTING = True
  34. TM_URL = "http://127.0.0.1:5001/tm"
  35. USERS_PER_PAGE = 4
  36. WTF_CSRF_ENABLED = False
  37. MAIL_SERVER = "localhost"
  38. MAIL_PORT = 8025
  39. MAIL_USERNAME = "user"
  40. MAIL_PASSWORD = "pass"
  41. MAIL_DEFAULT_SENDER = "no-reply@localhost"
  42. MAIL_BACKEND = "locmem"
  43. @pytest.fixture
  44. def app(tmp_path):
  45. app = create_app(TestingConfig)
  46. app.config["UPLOAD_FOLDER"] = tmp_path
  47. with app.app_context():
  48. db.create_all()
  49. admin_group = Group(id=1, name="admin")
  50. reviewer_group = Group(id=2, name="reviewer")
  51. staff_group = Group(id=3, name="staff")
  52. standard_group = Group(id=4, name="standard")
  53. db.session.add_all([admin_group, reviewer_group, standard_group])
  54. db.session.add(User(
  55. id=1,
  56. username="ada",
  57. email="ada@test.com",
  58. email_verified=True,
  59. activated=True,
  60. password_rotated=True,
  61. first_name="Ada",
  62. last_name="Min",
  63. organization_name="University of Rain",
  64. _password=PASS_HASH,
  65. groups=[standard_group, staff_group, reviewer_group, admin_group],
  66. ))
  67. db.session.add(User(
  68. id=2,
  69. username="reeve",
  70. email="reeve@test.com",
  71. email_verified=True,
  72. activated=True,
  73. password_rotated=True,
  74. first_name="Reeve",
  75. last_name="Ewing",
  76. organization_name="University of Rain",
  77. _password=PASS_HASH,
  78. groups=[standard_group, staff_group, reviewer_group],
  79. ))
  80. db.session.add(User(
  81. id=3,
  82. username="stan",
  83. email="stan@test.com",
  84. email_verified=True,
  85. activated=True,
  86. password_rotated=True,
  87. first_name="Stan",
  88. last_name="Ford",
  89. organization_name="Dept of Sunshine",
  90. _password=PASS_HASH,
  91. groups=[standard_group],
  92. ))
  93. db.session.add(User(
  94. id=4,
  95. username="gobnait",
  96. email="gobnait@test.com",
  97. email_verified=True,
  98. activated=True,
  99. password_rotated=True,
  100. first_name="Gobnait",
  101. last_name="Ní Mhurchú",
  102. organization_name="Dept of Sunshine",
  103. organization_address="123 Department Street",
  104. organization_phone="(01)1234567",
  105. position_in_organization="Officer",
  106. _password=PASS_HASH,
  107. groups=[standard_group],
  108. ))
  109. db.session.add(User(
  110. id=5,
  111. username="leo",
  112. email="leo@test.com",
  113. email_verified=True,
  114. activated=True,
  115. password_rotated=True,
  116. first_name="Leo",
  117. last_name="Cat",
  118. organization_name="Dept of Sunshine",
  119. _password=PASS_HASH,
  120. groups=[standard_group],
  121. ))
  122. db.session.add(User(
  123. id=6,
  124. username="una",
  125. email="una@test.com",
  126. email_verified=True,
  127. activated=True,
  128. password_rotated=True,
  129. first_name="Úna",
  130. last_name="Ssigned",
  131. organization_name="Dept of Sunshine",
  132. _password=PASS_HASH,
  133. ))
  134. db.session.add(User(
  135. id=7,
  136. username="steph",
  137. email="steph@test.com",
  138. email_verified=True,
  139. activated=True,
  140. password_rotated=True,
  141. first_name="Steph",
  142. last_name="Anie",
  143. organization_name="Dept of Sunshine",
  144. _password=PASS_HASH,
  145. groups=[standard_group, staff_group],
  146. ))
  147. db.session.add(User(
  148. id=8,
  149. username="vera",
  150. email="vera@test.com",
  151. password_rotated=True,
  152. first_name="Vera",
  153. last_name="Fication-Pending",
  154. organization_name="Dept of Sunshine",
  155. _password=PASS_HASH,
  156. ))
  157. db.session.add(User(
  158. id=9,
  159. username="ina",
  160. email="ina@test.com",
  161. email_verified=True,
  162. password_rotated=True,
  163. first_name="Ina",
  164. last_name="Ctive",
  165. organization_name="Dept of Sunshine",
  166. _password=PASS_HASH,
  167. ))
  168. db.session.add(User(
  169. id=10,
  170. username="maya",
  171. email="maya@test.com",
  172. email_verified=True,
  173. activated=True,
  174. first_name="Maya",
  175. last_name="Grated-User",
  176. organization_name="Dept of Sunshine",
  177. _password=PASS_HASH,
  178. groups=[standard_group],
  179. ))
  180. db.session.add(FundingProject(id=1, name="Funding Project A", short_name="FPA",
  181. funding_type=FundingType.NATIONAL_FUNDS, funding_country="IE"))
  182. db.session.add(FundingProject(id=2, name="Funding Project B", short_name="FPB", funding_type=FundingType.OTHER))
  183. db.session.add(FundingProject(id=3, name="Funding Project C", short_name="FPC",
  184. funding_type=FundingType.EU_FUNDS, funding_country="EU"))
  185. db.session.add(FundingProject(id=4, name="Funding Project D", short_name="FPD", funding_type=FundingType.OWN_FUNDS))
  186. db.session.add(Resource(
  187. id=1,
  188. uuid="uuid1",
  189. owner_id=4,
  190. contact_id=7,
  191. local_sharing_level=LocalSharingLevel.ALL,
  192. ec_sharing_level=EcSharingLevel.NONE,
  193. local_status=LocalResourceStatus.RAW,
  194. ec_status=EcResourceStatus.NOT_APPLICABLE,
  195. metadata_creator_id=2,
  196. ))
  197. db.session.add(Resource(
  198. id=2,
  199. uuid="uuid2",
  200. owner_id=4,
  201. contact_id=4,
  202. local_sharing_level=LocalSharingLevel.ALL,
  203. ec_sharing_level=EcSharingLevel.INTERNAL,
  204. local_status=LocalResourceStatus.PROCESSED,
  205. ec_status=EcResourceStatus.NOT_RELAYED,
  206. metadata_creator_id=2,
  207. funding_project_id=1,
  208. ))
  209. db.session.add(Resource(
  210. id=3,
  211. uuid="uuid3",
  212. owner_id=4,
  213. contact_id=4,
  214. local_sharing_level=LocalSharingLevel.INTERNAL,
  215. ec_sharing_level=EcSharingLevel.NONE,
  216. local_status=LocalResourceStatus.VALIDATED,
  217. ec_status=EcResourceStatus.NOT_APPLICABLE,
  218. metadata_creator_id=2,
  219. personal_data_included=True,
  220. funding_project_id=1,
  221. ))
  222. db.session.add(Resource(
  223. id=4,
  224. uuid="uuid4",
  225. owner_id=5,
  226. contact_id=5,
  227. local_sharing_level=LocalSharingLevel.INTERNAL,
  228. ec_sharing_level=EcSharingLevel.INTERNAL,
  229. local_status=LocalResourceStatus.PUBLISHED,
  230. ec_status=EcResourceStatus.NOT_RELAYED,
  231. funding_project_id=3,
  232. ))
  233. db.session.add(Resource(
  234. id=5,
  235. uuid="uuid5",
  236. owner_id=5,
  237. contact_id=5,
  238. local_sharing_level=LocalSharingLevel.ALL,
  239. ec_sharing_level=EcSharingLevel.ALL,
  240. local_status=LocalResourceStatus.PUBLISHED,
  241. ec_status=EcResourceStatus.RELAYED,
  242. metadata_creator_id=2,
  243. sensitive_data_included=True,
  244. funding_project_id=1,
  245. ))
  246. db.session.add(Resource(
  247. id=6,
  248. uuid="uuid6",
  249. owner_id=4,
  250. contact_id=4,
  251. metadata_creator_id=2,
  252. local_sharing_level=LocalSharingLevel.INTERNAL,
  253. ec_sharing_level=EcSharingLevel.INTERNAL,
  254. local_status=LocalResourceStatus.PUBLISHED,
  255. ec_status=EcResourceStatus.NOT_RELAYED,
  256. sensitive_data_included=True,
  257. sensitive_data_additional="Trade secrets",
  258. anonymized=True,
  259. anonymized_additional="regex-based",
  260. funding_project_id=1,
  261. ))
  262. db.session.add(Resource(
  263. id=7,
  264. uuid="uuid7",
  265. owner_id=7,
  266. contact_id=7,
  267. metadata_creator_id=2,
  268. local_sharing_level=LocalSharingLevel.ALL,
  269. ec_sharing_level=EcSharingLevel.INTERNAL,
  270. local_status=LocalResourceStatus.PUBLISHED,
  271. ec_status=EcResourceStatus.NOT_RELAYED,
  272. funding_project_id=2,
  273. ))
  274. db.session.add(Resource(
  275. id=8,
  276. uuid="uuid8",
  277. owner_id=4,
  278. contact_id=4,
  279. metadata_creator_id=2,
  280. local_sharing_level=LocalSharingLevel.ALL,
  281. ec_sharing_level=EcSharingLevel.INTERNAL,
  282. local_status=LocalResourceStatus.PUBLISHED,
  283. ec_status=EcResourceStatus.NOT_RELAYED,
  284. funding_project_id=1,
  285. ))
  286. db.session.add(Resource(
  287. id=9,
  288. uuid="uuid9",
  289. owner_id=7,
  290. contact_id=7,
  291. metadata_creator_id=1,
  292. local_sharing_level=LocalSharingLevel.ALL,
  293. ec_sharing_level=EcSharingLevel.INTERNAL,
  294. local_status=LocalResourceStatus.PUBLISHED,
  295. ec_status=EcResourceStatus.NOT_RELAYED,
  296. funding_project_id=3,
  297. ))
  298. db.session.add(Resource(
  299. id=10,
  300. uuid="uuid10",
  301. owner_id=7,
  302. contact_id=7,
  303. metadata_creator_id=2,
  304. local_sharing_level=LocalSharingLevel.ALL,
  305. ec_sharing_level=EcSharingLevel.INTERNAL,
  306. local_status=LocalResourceStatus.PUBLISHED,
  307. ec_status=EcResourceStatus.NOT_RELAYED,
  308. funding_project_id=1,
  309. ))
  310. db.session.add(ResourceTitle(resource_id=1, language="en", content="res-01"))
  311. db.session.add(ResourceTitle(resource_id=2, language="en", content="res-02"))
  312. db.session.add(ResourceTitle(resource_id=2, language="ga", content="ac-02"))
  313. db.session.add(ResourceTitle(resource_id=3, language="en", content="cinnamon"))
  314. db.session.add(ResourceTitle(resource_id=4, language="ga", content="ac-04"))
  315. db.session.add(ResourceTitle(resource_id=5, language="en", content="elderflower"))
  316. db.session.add(ResourceTitle(resource_id=6, language="en", content="fennel"))
  317. db.session.add(ResourceTitle(resource_id=6, language="ga", content="fearn"))
  318. db.session.add(ResourceTitle(resource_id=7, language="en", content="res-07"))
  319. db.session.add(ResourceTitle(resource_id=8, language="en", content="res-08"))
  320. db.session.add(ResourceTitle(resource_id=9, language="en", content="res-09"))
  321. db.session.add(ResourceTitle(resource_id=10, language="en", content="res-10"))
  322. db.session.add(ResourceDescription(resource_id=1, language="en", content="aniseed, basil"))
  323. db.session.add(ResourceDescription(resource_id=2, language="en", content="dill, fennel, lime"))
  324. db.session.add(ResourceDescription(resource_id=3, language="en", content="fennel, ginger"))
  325. db.session.add(ResourceDescription(resource_id=4, language="en", content="ginger"))
  326. db.session.add(ResourceDescription(resource_id=5, language="ga", content="acmhainn eile"))
  327. db.session.add(ResourceDescription(resource_id=6, language="en", content="lime, basil, ginger"))
  328. db.session.add(ResourceDescription(resource_id=6, language="ga", content="luis, beith, gort"))
  329. db.session.add(ResourceDescription(resource_id=7, language="en", content="aniseed, ginger"))
  330. db.session.add(ResourceDescription(resource_id=8, language="en", content="resource #08"))
  331. db.session.add(ResourceDescription(resource_id=9, language="en", content="resource #09"))
  332. db.session.add(ResourceDescription(resource_id=10, language="en", content="resource #10"))
  333. db.session.add(ResourceDsi(resource_id=4, dsi=Dsi.EH))
  334. db.session.add(ResourceDsi(resource_id=5, dsi=Dsi.EJ))
  335. db.session.add(ResourceDsi(resource_id=5, dsi=Dsi.EURO))
  336. db.session.add(ResourceDsi(resource_id=6, dsi=Dsi.ODR))
  337. db.session.add(ResourceDsi(resource_id=6, dsi=Dsi.CS))
  338. db.session.add(ResourceDsi(resource_id=8, dsi=Dsi.EJ))
  339. db.session.add(ResourceDsi(resource_id=9, dsi=Dsi.CS))
  340. db.session.add(ResourceDsi(resource_id=10, dsi=Dsi.EJ))
  341. db.session.add(ResourceDsi(resource_id=10, dsi=Dsi.ODR))
  342. db.session.add(ResourceDsi(resource_id=10, dsi=Dsi.SI))
  343. db.session.add(ResourceTheme(resource_id=4, theme=Theme.HEALTH))
  344. db.session.add(ResourceTheme(resource_id=5, theme=Theme.ENERGY))
  345. db.session.add(ResourceTheme(resource_id=5, theme=Theme.ENVIRONMENT))
  346. db.session.add(ResourceTheme(resource_id=6, theme=Theme.HOUSING))
  347. db.session.add(ResourceTheme(resource_id=6, theme=Theme.REGIONS))
  348. db.session.add(ResourceTheme(resource_id=7, theme=Theme.REGIONS))
  349. db.session.add(ResourceTheme(resource_id=9, theme=Theme.REGIONS))
  350. db.session.add(ResourceTheme(resource_id=9, theme=Theme.TRANSPORT))
  351. db.session.add(ResourceTheme(resource_id=9, theme=Theme.ENVIRONMENT))
  352. db.session.add(ResourceTheme(resource_id=10, theme=Theme.JUSTICE))
  353. db.session.add(Licence(id=1, resource_id=1, type=LicenceType.CC_BY_SA_40))
  354. db.session.add(Licence(id=2, resource_id=2, type=LicenceType.PSI, name="Terms for PSI-compliant resources"))
  355. db.session.add(Licence(id=3, resource_id=3, type=LicenceType.CC_BY_40))
  356. db.session.add(Licence(id=4, resource_id=4, type=LicenceType.OTHER))
  357. db.session.add(Licence(id=5, resource_id=5, type=LicenceType.PUBLIC_DOMAIN, name="Terms for Public Domain resources"))
  358. db.session.add(Licence(id=6, resource_id=6, type=LicenceType.OTHER, name="Special licence"))
  359. db.session.add(Licence(id=7, resource_id=7, type=LicenceType.CC0_10))
  360. db.session.add(Licence(id=8, resource_id=8, type=LicenceType.OTHER))
  361. db.session.add(Licence(id=9, resource_id=9, type=LicenceType.OTHER))
  362. db.session.add(Licence(id=10, resource_id=10, type=LicenceType.CC0_10))
  363. db.session.add(LicenceText(licence_id=2, language="en", content="PSI Text"))
  364. db.session.add(LicenceText(licence_id=5, language="en", content="The resource is free of all known legal restrictions."))
  365. db.session.add(LicenceText(licence_id=5, language="ga", content="Tá an acmhainn glan ar gach srian dlí atá aitheanta."))
  366. db.session.add(LicenceText(licence_id=6, language="en", content="Special terms"))
  367. db.session.add(LicenceText(licence_id=6, language="ga", content="Téarmaí speisialta"))
  368. db.session.add(LicenceCondition(licence_id=1, condition=LicenceConditionType.ATTRIBUTION))
  369. db.session.add(LicenceCondition(licence_id=1, condition=LicenceConditionType.SHARE_ALIKE))
  370. db.session.add(LicenceCondition(licence_id=3, condition=LicenceConditionType.ATTRIBUTION))
  371. db.session.add(LicenceCondition(licence_id=6, condition=LicenceConditionType.ATTRIBUTION))
  372. db.session.add(LicenceCondition(licence_id=6, condition=LicenceConditionType.NON_COMMERCIAL))
  373. db.session.add(LicenceCondition(licence_id=6, condition=LicenceConditionType.NO_DERIVATIVES))
  374. db.session.add(ResourceAttribution(resource_id=1, language="en", content="Resource 1 attribution"))
  375. db.session.add(ResourceAttribution(resource_id=6, language="en", content="Details"))
  376. db.session.add(ResourceAttribution(resource_id=6, language="ga", content="Sonraí"))
  377. db.session.add(ResourceIprHolder(resource_id=3))
  378. db.session.add(ResourceIprHolder(
  379. resource_id=6,
  380. person_first_name="I.P.R.",
  381. person_last_name="Holden",
  382. organization_name="Dept of Thunderstorms",
  383. email="ipr.holden@test.com",
  384. ))
  385. db.session.add(ResourceIprHolder(
  386. resource_id=6,
  387. organization_name="Dept of Mysteries",
  388. email="mysteries@test.com",
  389. address="123 Mystery Street",
  390. phone="(01) 123 4567",
  391. ))
  392. db.session.add(ResourceIprHolder(
  393. resource_id=6,
  394. person_last_name="Surname",
  395. email="surname@test.com",
  396. ))
  397. db.session.add(ResourceFileInfo(
  398. id=1,
  399. resource_id=1,
  400. linguality_type=LingualityType.MONOLINGUAL,
  401. multilinguality_type=MultilingualityType.NOT_APPLICABLE,
  402. format="",
  403. character_encoding="utf8",
  404. size=0,
  405. size_unit=SizeUnit.OTHER,
  406. ))
  407. db.session.add(ResourceFileInfo(
  408. id=2,
  409. resource_id=2,
  410. linguality_type=LingualityType.MONOLINGUAL,
  411. multilinguality_type=MultilingualityType.NOT_APPLICABLE,
  412. format="text/plain",
  413. character_encoding="utf8",
  414. size=222,
  415. size_unit=SizeUnit.WORDS,
  416. ))
  417. db.session.add(ResourceFileInfo(
  418. id=4,
  419. resource_id=4,
  420. linguality_type=LingualityType.MONOLINGUAL,
  421. multilinguality_type=MultilingualityType.NOT_APPLICABLE,
  422. format="text/plain",
  423. character_encoding="ascii",
  424. size=44444,
  425. size_unit=SizeUnit.WORDS,
  426. ))
  427. db.session.add(ResourceFileInfo(
  428. id=5,
  429. resource_id=5,
  430. linguality_type=LingualityType.BILINGUAL,
  431. multilinguality_type=MultilingualityType.PARALLEL,
  432. format="application/x-tmx+xml",
  433. character_encoding="utf16",
  434. size=55555,
  435. size_unit=SizeUnit.TRANSLATION_UNITS,
  436. ))
  437. db.session.add(ResourceFileInfo(
  438. id=6,
  439. resource_id=6,
  440. linguality_type=LingualityType.MULTILINGUAL,
  441. multilinguality_type=MultilingualityType.COMPARABLE,
  442. format="text/csv",
  443. character_encoding="utf8",
  444. size=66666,
  445. size_unit=SizeUnit.TERMS,
  446. ))
  447. db.session.add(ResourceFileInfo(
  448. id=7,
  449. resource_id=6,
  450. linguality_type=LingualityType.BILINGUAL,
  451. multilinguality_type=MultilingualityType.PARALLEL,
  452. format="application/x-tmx+xml",
  453. character_encoding="utf8",
  454. size=246,
  455. size_unit=SizeUnit.TRANSLATION_UNITS,
  456. ))
  457. db.session.add(ResourceFileInfo(
  458. id=8,
  459. resource_id=6,
  460. linguality_type=LingualityType.BILINGUAL,
  461. multilinguality_type=MultilingualityType.OTHER,
  462. format="text/plain",
  463. character_encoding="big5solaris",
  464. size=664422,
  465. size_unit=SizeUnit.SENTENCES,
  466. ))
  467. db.session.add(ResourceFileInfo(
  468. id=9,
  469. resource_id=1,
  470. linguality_type=LingualityType.UNKNOWN,
  471. multilinguality_type=MultilingualityType.UNKNOWN,
  472. format="text/plain",
  473. character_encoding="utf8",
  474. size=654321,
  475. size_unit=SizeUnit.OTHER,
  476. ))
  477. db.session.add(ResourceFileInfo(
  478. id=10,
  479. resource_id=5,
  480. linguality_type=LingualityType.MONOLINGUAL,
  481. multilinguality_type=MultilingualityType.PARALLEL,
  482. format="text/plain",
  483. character_encoding="utf8",
  484. size=6420,
  485. size_unit=SizeUnit.WORDS,
  486. ))
  487. db.session.add(ResourceFileInfo(
  488. id=11,
  489. resource_id=7,
  490. linguality_type=LingualityType.BILINGUAL,
  491. multilinguality_type=MultilingualityType.PARALLEL,
  492. format="application/x-tmx+xml",
  493. character_encoding="utf8",
  494. size=711,
  495. size_unit=SizeUnit.TRANSLATION_UNITS,
  496. ))
  497. db.session.add(ResourceFileInfo(
  498. id=12,
  499. resource_id=8,
  500. linguality_type=LingualityType.BILINGUAL,
  501. multilinguality_type=MultilingualityType.PARALLEL,
  502. format="application/x-tmx+xml",
  503. character_encoding="utf8",
  504. size=812,
  505. size_unit=SizeUnit.TRANSLATION_UNITS,
  506. ))
  507. db.session.add(ResourceFileInfo(
  508. id=13,
  509. resource_id=9,
  510. linguality_type=LingualityType.BILINGUAL,
  511. multilinguality_type=MultilingualityType.PARALLEL,
  512. format="application/x-tmx+xml",
  513. character_encoding="utf8",
  514. size=913,
  515. size_unit=SizeUnit.TRANSLATION_UNITS,
  516. ))
  517. db.session.add(ResourceFileInfo(
  518. id=14,
  519. resource_id=10,
  520. linguality_type=LingualityType.BILINGUAL,
  521. multilinguality_type=MultilingualityType.PARALLEL,
  522. format="application/x-tmx+xml",
  523. character_encoding="utf8",
  524. size=1014,
  525. size_unit=SizeUnit.TRANSLATION_UNITS,
  526. ))
  527. db.session.add(ResourceFileLanguage(resource_file_info_id=2, language="ga"))
  528. db.session.add(ResourceFileLanguage(resource_file_info_id=4, language="zz"))
  529. db.session.add(ResourceFileLanguage(resource_file_info_id=5, language="en"))
  530. db.session.add(ResourceFileLanguage(resource_file_info_id=5, language="ga"))
  531. db.session.add(ResourceFileLanguage(resource_file_info_id=6, language="ga"))
  532. db.session.add(ResourceFileLanguage(resource_file_info_id=6, language="en"))
  533. db.session.add(ResourceFileLanguage(resource_file_info_id=6, language="de"))
  534. db.session.add(ResourceFileLanguage(resource_file_info_id=7, language="ga"))
  535. db.session.add(ResourceFileLanguage(resource_file_info_id=7, language="en"))
  536. db.session.add(ResourceFileLanguage(resource_file_info_id=8, language="ga"))
  537. db.session.add(ResourceFileLanguage(resource_file_info_id=8, language="en"))
  538. db.session.add(ResourceFileLanguage(resource_file_info_id=11, language="ga"))
  539. db.session.add(ResourceFileLanguage(resource_file_info_id=11, language="en"))
  540. db.session.add(ResourceFileLanguage(resource_file_info_id=12, language="ga"))
  541. db.session.add(ResourceFileLanguage(resource_file_info_id=12, language="en"))
  542. db.session.add(ResourceFileLanguage(resource_file_info_id=13, language="ga"))
  543. db.session.add(ResourceFileLanguage(resource_file_info_id=13, language="en"))
  544. db.session.add(ResourceFileLanguage(resource_file_info_id=14, language="ga"))
  545. db.session.add(ResourceFileLanguage(resource_file_info_id=14, language="en"))
  546. db.session.add(ResourceStat(resource_id=4, user_id=7, action='v'))
  547. db.session.add(ResourceStat(resource_id=4, user_id=3, action='v'))
  548. db.session.add(ResourceStat(resource_id=5, user_id=2, action='d'))
  549. db.session.add(ResourceStat(resource_id=6, user_id=1, action='v'))
  550. db.session.add(ResourceStat(resource_id=6, user_id=2, action='v'))
  551. db.session.add(ResourceStat(resource_id=6, user_id=3, action='v'))
  552. db.session.add(ResourceStat(resource_id=6, user_id=4, action='v'))
  553. db.session.add(ResourceStat(resource_id=6, user_id=5, action='v'))
  554. db.session.add(ResourceStat(resource_id=6, user_id=6, action='v'))
  555. db.session.add(ResourceStat(resource_id=6, user_id=7, action='v'))
  556. db.session.add(ResourceStat(resource_id=6, user_id=1, action='d'))
  557. db.session.add(ResourceStat(resource_id=6, user_id=3, action='d'))
  558. db.session.add(ResourceStat(resource_id=6, user_id=4, action='d'))
  559. db.session.add(ResourceStat(resource_id=6, user_id=7, action='d'))
  560. db.session.commit()
  561. app.elasticsearch = mock.Mock()
  562. yield app
  563. @pytest.fixture
  564. def client(app):
  565. return app.test_client()
  566. class AuthActions:
  567. def __init__(self, client):
  568. self._client = client
  569. def login(self, username):
  570. return self._client.post(
  571. "/auth/login",
  572. data={"username" : username, "password" : PASS},
  573. )
  574. def logout(self):
  575. return self._client.get("/auth/logout")
  576. @pytest.fixture
  577. def auth(client):
  578. return AuthActions(client)