Test Failed
Push — main ( 3c00a2...7c8c49 )
by torrua
02:08
created

tests.test_model_base.TestDefinition.test_link_keys()   A

Complexity

Conditions 2

Size

Total Lines 36
Code Lines 29

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 29
nop 1
dl 0
loc 36
rs 9.184
c 0
b 0
f 0
1
# -*- coding: utf-8 -*-
2
# pylint: disable=R0201, R0903, C0116, C0103
3
"""Base Model unit tests."""
4
5
import datetime
6
import pytest
7
import sqlalchemy.exc
8
9
from loglan_db.model_base import BaseWord as Word, BaseType as Type, BaseEvent as Event, \
10
    BaseAuthor as Author, BaseDefinition as Definition, BaseKey as Key, BaseSetting as Setting, \
11
    BaseSyllable as Syllable, BaseWordSource as WordSource
12
13
from tests.functions import db_connect_authors, db_connect_keys, db_connect_words, \
14
    db_add_objects, dar, db_add_object
15
16
from tests.data import keys, definitions, words, types, authors, settings, syllables, \
17
    prim_words, prim_types, word_1_source_1
18
from tests.data import changed_words, changed_events, all_events, doubled_words
19
from tests.data import littles, little_types
20
from tests.data import definition_1, definition_2, word_1, word_2, word_3
21
from tests.data import un_key_1, un_key_2, un_key_3
22
23
from tests.data import connect_authors
24
from tests.data import connect_keys
25
from tests.data import connect_words
26
27
28
@pytest.mark.usefixtures("db")
29
class TestAuthor:
30
    """Author tests."""
31
    @pytest.mark.parametrize("item", authors)
32
    def test_create_from_dict_with_data(self, item):
33
        """Get Word by ID."""
34
35
        author = dar(Author, item)
36
        author_from_db = Author.get_by_id(item["id"])
37
38
        assert author == author_from_db
39
        assert isinstance(author, Author)
40
        assert isinstance(author.id, int)
41
        assert isinstance(author.abbreviation, str)
42
        assert isinstance(author.full_name, (str, type(None)))
43
        assert isinstance(author.notes, (str, type(None)))
44
45
    def test_relationship_contribution(self):
46
        db_add_objects(Author, authors)
47
        db_add_objects(Word, words)
48
        db_connect_authors(connect_authors)
49
50
        test_author = Author.get_by_id(29)
51
        assert len(test_author.contribution) == 3
52
        assert isinstance(test_author.contribution, list)
53
        assert [w.name for w in test_author.contribution] == ['kakto', 'pruci', 'prukao']
54
55
        test_author = Author.get_by_id(13)
56
        assert len(test_author.contribution) == 3
57
        assert [w.name for w in test_author.contribution] == ['kak', 'kao', 'pru']
58
59
60
@pytest.mark.usefixtures("db")
61
class TestEvent:
62
    """Event tests."""
63
64
    @pytest.mark.parametrize("item", all_events)
65
    def test_create_from_dict_with_data(self, item):
66
        """Get Word by ID."""
67
68
        event = dar(Event, item)
69
        event_from_db = Event.get_by_id(item["id"])
70
71
        assert event == event_from_db
72
        assert isinstance(event, Event)
73
        assert isinstance(event.id, int)
74
        assert isinstance(event.date, datetime.date)
75
        assert isinstance(event.name, str)
76
        assert isinstance(event.definition, str)
77
        assert isinstance(event.annotation, str)
78
        assert isinstance(event.suffix, str)
79
80
    def test_relationship_deprecated_words(self):
81
        db_add_objects(Word, changed_words)
82
        db_add_objects(Event, changed_events)
83
        event = Event.get_by_id(5)
84
85
        assert isinstance(event.appeared_words, list)
86
        assert len(event.appeared_words) == 3
87
88
    def test_relationship_appeared_words(self):
89
        db_add_objects(Word, changed_words)
90
        db_add_objects(Event, changed_events)
91
        event = Event.get_by_id(5)
92
93
        assert isinstance(event.deprecated_words, list)
94
        assert len(event.deprecated_words) == 4
95
96
    def test_latest(self):
97
        db_add_objects(Event, all_events)
98
        latest = Event.latest()
99
100
        assert latest.id == 6
101
        assert latest.annotation == 'Torrua Repair'
102
103
104
@pytest.mark.usefixtures("db")
105
class TestKey:
106
    """Key tests."""
107
108
    @pytest.mark.parametrize("item", keys)
109
    def test_create_from_dict_with_data(self, item):
110
        """Get Word by ID."""
111
112
        key = dar(Key, item)
113
        key_from_db = Key.get_by_id(item["id"])
114
115
        assert key == key_from_db
116
        assert isinstance(key, Key)
117
        assert isinstance(key.id, int)
118
        assert isinstance(key.word, str)
119
        assert isinstance(key.language, (str, type(None)))
120
121
    def test_relationship_definitions(self):
122
        db_add_objects(Key, keys)
123
        db_add_objects(Definition, definitions)
124
        db_connect_keys(connect_keys)
125
        key = Key.get_by_id(12474)
126
127
        assert isinstance(key.definitions, list)
128
        assert len(key.definitions) == 5
129
        assert [d.id for d in key.definitions] == [13521, 13523, 13524, 13527, 13531]
130
131
    def test_uniqueness(self):
132
        db_add_objects(Key, [un_key_1, un_key_2, ])
133
        result = [k.word for k in Key.get_all()]
134
        assert result == ["examine", "examine", ]
135
136
        with pytest.raises(sqlalchemy.exc.IntegrityError) as _:
137
            assert isinstance(dar(Key, un_key_3), Key)
138
139
140
@pytest.mark.usefixtures("db")
141
class TestSetting:
142
    """Setting tests."""
143
144
    @pytest.mark.parametrize("item", settings)
145
    def test_create_from_dict_with_data(self, item):
146
        """Get Word by ID."""
147
148
        setting = dar(Setting, item)
149
        setting_from_db = Setting.get_by_id(item["id"])
150
151
        assert setting == setting_from_db
152
        assert isinstance(setting, Setting)
153
        assert isinstance(setting.id, int)
154
        assert isinstance(setting.date, (datetime.datetime, type(None)))
155
        assert isinstance(setting.db_version, int)
156
        assert isinstance(setting.last_word_id, int)
157
        assert isinstance(setting.db_release, str)
158
159
160
@pytest.mark.usefixtures("db")
161
class TestSyllable:
162
    """Syllable tests."""
163
164
    @pytest.mark.parametrize("item", syllables)
165
    def test_create_from_dict_with_data(self, item):
166
        """Get Word by ID."""
167
168
        syllable = dar(Syllable, item)
169
        syllable_from_db = Syllable.get_by_id(item["id"])
170
171
        assert syllable == syllable_from_db
172
        assert isinstance(syllable, Syllable)
173
        assert isinstance(syllable.id, int)
174
        assert isinstance(syllable.name, str)
175
        assert isinstance(syllable.type, str)
176
        assert isinstance(syllable.allowed, (bool, type(None)))
177
178
179
@pytest.mark.usefixtures("db")
180
class TestType:
181
    """Type tests."""
182
183
    @pytest.mark.parametrize("item", types)
184
    def test_create_from_dict_with_data(self, item):
185
        type_ = dar(Type, item)
186
        type_from_db = Type.get_by_id(item["id"])
187
188
        assert type_ == type_from_db
189
        assert isinstance(type_.id, int)
190
        assert isinstance(type_.type, str)
191
        assert isinstance(type_.type_x, str)
192
        assert isinstance(type_.group, (str, type(None)))
193
        assert isinstance(type_.parentable, bool)
194
        assert isinstance(type_.description, (str, type(None)))
195
        with pytest.raises(Exception) as _:
196
            assert type_.type == "A-Prim"
197
198
    def test_by(self):
199
        db_add_objects(Type, types)
200
        test_type = Type.by("Little").first()
201
        assert test_type.type == "Afx"
202
203
        test_type = Type.by("Little")
204
        assert test_type[0].type == "Afx"
205
206
        test_type = Type.by("2-Cpx").first()
207
        assert test_type.group == "Cpx"
208
209
        test_type = Type.by("Predicate").count()
210
        assert test_type == 2
211
212
    def test_relationship_words(self):
213
        db_add_objects(Type, types)
214
        db_add_objects(Word, words)
215
216
        test_type = Type.by("Little").first()
217
        assert len(test_type.words) == 3
218
219
        test_type = Type.by("C-Prim").first()
220
        assert len(test_type.words) == 2
221
222
        test_type = Type.by("Cpx").first()
223
        assert len(test_type.words) == 1
224
225
226
@pytest.mark.usefixtures("db")
227
class TestDefinition:
228
    """Definition tests."""
229
230
    @pytest.mark.parametrize("item", definitions)
231
    def test_create_from_dict_with_data(self, item):
232
        definition = dar(Definition, item)
233
        definition_from_db = Definition.get_by_id(item["id"])
234
235
        assert definition == definition_from_db
236
        assert isinstance(definition.id, int)
237
        assert isinstance(definition.word_id, int)
238
        assert isinstance(definition.position, int)
239
        assert isinstance(definition.usage, (str, type(None)))
240
        assert isinstance(definition.grammar_code, (str, type(None)))
241
        assert isinstance(definition.slots, (int, type(None)))
242
        assert isinstance(definition.case_tags, (str, type(None)))
243
        assert isinstance(definition.body, str)
244
        assert isinstance(definition.language, (str, type(None)))
245
        assert isinstance(definition.notes, (str, type(None)))
246
247
    def test_relationship_keys(self):
248
        pass
249
250
    def test_relationship_source_word(self):
251
        pass
252
253
    def test_grammar(self):
254
        db_add_objects(Definition, definitions)
255
        d = Definition.get_by_id(13527)
256
        assert d.grammar == "(4v)"
257
258
        d = Definition.get_by_id(13529)
259
        assert d.grammar == "(a)"
260
261
    def test_link_keys_from_list_of_str(self):
262
        db_add_objects(Definition, definitions)
263
        db_add_objects(Key, keys)
264
265
        keys_to_add = ["test", "examine"]
266
        d = Definition.get_by_id(13527)
267
        assert d.keys.count() == 0
268
269
        d.link_keys_from_list_of_str(keys_to_add)
270
        assert d.keys.count() == 2
271
        assert sorted([k.word for k in d.keys]) == sorted(keys_to_add)
272
273
    def test_link_key_from_str(self):
274
        db_add_objects(Key, keys)
275
        d = dar(Definition, definition_2)
276
        assert d.keys.count() == 0
277
278
        key_to_add = "tester"
279
        d.link_key_from_str(key_to_add)
280
        assert d.keys.count() == 1
281
        assert d.keys.first().word == key_to_add
282
283
    def test_link_keys_from_definition_body(self):
284
        db_add_objects(Key, keys)
285
        d = dar(Definition, definition_1)
286
        assert d.keys.count() == 0
287
288
        d.link_keys_from_definition_body()
289
        assert d.keys.count() == 2
290
        assert sorted([k.word for k in d.keys]) == sorted(["test", "examine"])
291
292
    def test_link_keys(self):
293
        db_add_objects(Key, keys)
294
295
        d0 = dar(Definition, definitions[0])
296
        assert d0.keys.count() == 0
297
        keys_to_add_str = ["test", "examine"]
298
        d0.link_keys(keys_to_add_str)
299
        assert d0.keys.count() == 2
300
301
        d1 = dar(Definition, definitions[1])
302
        assert d1.keys.count() == 0
303
        key_to_add_str = "tester"
304
        d1.link_keys(key_to_add_str)
305
        assert d1.keys.count() == 1
306
307
        d2 = dar(Definition, definitions[10])
308
        assert d2.keys.count() == 0
309
        d2.link_keys()
310
        assert d2.keys.count() == 2
311
312
        d3 = dar(Definition, definitions[3])
313
        es_word, es_code = "probar", "es"
314
        ru_word, ru_code = "тест", "ru"
315
        db_add_object(Key, {"word": es_word, "language": es_code})
316
        db_add_object(Key, {"word": ru_word, "language": ru_code})
317
318
        d3.link_keys(source=ru_word, language=ru_code)
319
        assert d3.keys.first().language == ru_code
320
321
        d3.link_keys(source=es_word, language=es_code)
322
        assert d3.keys.count() == 2
323
        assert sorted([k.language for k in d3.keys.all()]) == [es_code, ru_code]
324
325
        d4 = dar(Definition, definitions[4])
326
        with pytest.raises(TypeError) as _:
327
            d4.link_keys(source=1234)
328
329
    def test_by_key(self):
330
        db_add_objects(Key, keys)
331
        db_add_objects(Definition, definitions)
332
        db_connect_keys(connect_keys)
333
334
        result = Definition.by_key("Test", case_sensitive=True).all()
335
        assert len(result) == 0
336
337
        result = Definition.by_key("test", case_sensitive=True, partial_results=True).all()
338
        assert len(result) == 10
339
340
        result = Definition.by_key("test", case_sensitive=True, partial_results=False, language="en").all()
341
        assert len(result) == 5
342
343
        result = Definition.by_key("Test", case_sensitive=False, partial_results=True).all()
344
        assert len(result) == 10
345
346
        result = Definition.by_key("test", language="es").all()
347
        assert len(result) == 0
348
349
350
@pytest.mark.usefixtures("db")
351
class TestWord:
352
    """Word tests."""
353
354
    @pytest.mark.parametrize("item", words)
355
    def test_create_from_dict_with_data(self, item):
356
        """Get Word by ID."""
357
        word = dar(Word, item)
358
        word_from_db = Word.get_by_id(item["id"])
359
360
        assert word == word_from_db
361
        assert isinstance(word.id, int)
362
        assert isinstance(word.id_old, int)
363
        assert isinstance(word.name, str)
364
        assert isinstance(word.origin, (str, type(None)))
365
        assert isinstance(word.origin_x, (str, type(None)))
366
        assert isinstance(word.match, (str, type(None)))
367
        assert isinstance(word.rank, (str, type(None)))
368
        assert isinstance(word.year, (datetime.date, type(None)))
369
        assert isinstance(word.notes, (dict, type(None)))
370
        assert isinstance(word.TID_old, (int, type(None)))
371
372
    @pytest.mark.parametrize("item", words)
373
    def test_type_relationship(self, item):
374
        word = dar(Word, item)
375
376
        type_data = [t for t in types if t["id"] == word.type_id][0]
377
        type_ = dar(Type, type_data)
378
379
        type_from_db = Type.get_by_id(word.type_id)
380
381
        assert isinstance(type_, Type)
382
        assert isinstance(type_from_db, Type)
383
        assert type_from_db == type_ == word.type
384
385
    @pytest.mark.parametrize("item", words)
386
    def test_event_relationship(self, item):
387
        db_add_objects(Event, all_events)
388
        word = dar(Word, item)
389
390
        event_start_from_db = Event.get_by_id(word.event_start_id)
391
        assert isinstance(event_start_from_db, Event)
392
        assert event_start_from_db == word.event_start
393
394
        if word.event_end_id:
395
            event_end_from_db = Event.get_by_id(word.event_end_id)
396
            assert isinstance(event_end_from_db, Event)
397
            assert event_end_from_db == word.event_start
398
        else:
399
            assert word.event_end is None
400
401
    def test_authors_relationship(self):
402
        db_add_objects(Word, words)
403
        db_add_objects(Author, authors)
404
        db_connect_authors(connect_authors)
405
406
        word = Word.get_by_id(7316)
407
        author = Author.get_by_id(29)
408
409
        assert word.authors.count() == 1
410
        assert word.authors[0] == author
411
        assert word.authors.first() == author
412
        assert isinstance(word.authors.all(), list)
413
        assert len(word.authors.all()) == 1
414
415
    def test_definitions_relationship(self):
416
        word = dar(Word, word_1)
417
        definitions_to_add = [d for d in definitions if d["word_id"] == word.id]
418
        db_add_objects(Definition, definitions_to_add)
419
420
        assert word.definitions.count() == len(definitions_to_add) == 5
421
        assert isinstance(word.definitions[0], Definition)
422
423
    def test_add_child(self):
424
        db_add_objects(Word, words)
425
        cmp = Word.get_by_id(word_1.get("id"))
426
        assert cmp._parents.count() == 0
427
428
        for p in [word_2, word_3]:
429
            prim = Word.get_by_id(p.get("id"))
430
            result = prim.add_child(cmp)
431
            assert result == cmp.name
432
433
        assert cmp._parents.count() == 2
434
435
        prim = Word.get_by_id(word_3.get("id"))
436
        prim.add_child(cmp)
437
        assert cmp._parents.count() == 2
438
439
    def test_add_children(self):
440
        db_add_objects(Word, words)
441
        cmp = Word.get_by_id(word_1.get("id"))
442
        assert cmp._parents.count() == 0
443
444
        for p in [word_2, word_3]:
445
            prim = Word.get_by_id(p.get("id"))
446
            prim.add_children([cmp, ])
447
448
        assert cmp._parents.count() == 2
449
450
    def test_add_author(self):
451
        db_add_objects(Word, words)
452
        db_add_objects(Author, authors)
453
454
        word = Word.get_by_id(7316)
455
        author = Author.get_by_id(29)
456
        assert word.authors.count() == 0
457
458
        word.add_author(author)
459
        assert word.authors.count() == 1
460
        assert word.authors[0] == author
461
462
        word.add_author(author)
463
        assert word.authors.count() == 1
464
465
    def test_add_authors(self):
466
        db_add_objects(Word, words)
467
        db_add_objects(Author, authors)
468
469
        word = Word.get_by_id(7316)
470
        assert word.authors.count() == 0
471
472
        local_authors = Author.get_all()
473
        word.add_authors(local_authors)
474
475
        assert word.authors.count() == 2
476
        assert isinstance(word.authors[0], Author)
477
478
    def test_query_derivatives(self):
479
        db_add_objects(Word, words)
480
        db_add_objects(Type, types)
481
        db_connect_words(connect_words)
482
483
        p1 = Word.get_by_id(3813)
484
        p2 = Word.get_by_id(7315)
485
486
        assert p1.query_derivatives().count() == 3
487
        assert p2.query_derivatives().count() == 2
488
        assert isinstance(p2.query_derivatives().first(), Word)
489
490
        assert p1.query_derivatives(word_type="Afx").count() == 2
491
        assert p1.query_derivatives(word_type="2-Cpx").count() == 1
492
493
        assert p1.query_derivatives(word_type_x="Predicate").count() == 1
494
        assert p2.query_derivatives(word_type_x="Affix").count() == 1
495
496
        assert p1.query_derivatives(word_group="Little").count() == 2
497
        assert p2.query_derivatives(word_group="Cpx").count() == 1
498
499
    def test_query_parents(self):
500
        db_add_objects(Word, words)
501
        db_connect_words(connect_words)
502
503
        cmp = Word.get_by_id(7316)
504
505
        assert cmp.query_parents().count() == 2
506
        assert isinstance(cmp.query_parents().first(), Word)
507
508
    def test_query_cpx(self):
509
        db_add_objects(Word, words)
510
        db_add_objects(Type, types)
511
        db_connect_words(connect_words)
512
513
        p1 = Word.get_by_id(3813)
514
        p2 = Word.get_by_id(7315)
515
516
        assert p1.query_cpx().count() == 1
517
        assert p2.query_cpx().count() == 1
518
519
    def test_query_afx(self):
520
        db_add_objects(Word, words)
521
        db_add_objects(Type, types)
522
        db_connect_words(connect_words)
523
524
        p1 = Word.get_by_id(3813)
525
        p2 = Word.get_by_id(7315)
526
527
        assert p1.query_afx().count() == 2
528
        assert p2.query_afx().count() == 1
529
530
    def test_query_keys(self):
531
        db_add_objects(Word, words)
532
        db_add_objects(Key, keys)
533
        db_add_objects(Definition, definitions)
534
        db_connect_keys(connect_keys)
535
536
        result = Word.get_by_id(7316).query_keys().count()
537
538
        assert result == 7
539
540
    def test_parents(self):
541
        db_add_objects(Word, words)
542
        db_connect_words(connect_words)
543
544
        result = Word.get_by_id(7316).parents
545
546
        assert len(result) == 2
547
        assert isinstance(result, list)
548
        assert isinstance(result[0], Word)
549
550
    def test_complexes(self):
551
        db_add_objects(Word, words)
552
        db_add_objects(Type, types)
553
        db_connect_words(connect_words)
554
555
        result = Word.get_by_id(3813).complexes
556
557
        assert len(result) == 1
558
        assert isinstance(result, list)
559
        assert isinstance(result[0], Word)
560
561
    def test_affixes(self):
562
        db_add_objects(Word, words)
563
        db_add_objects(Type, types)
564
        db_connect_words(connect_words)
565
566
        result = Word.get_by_id(3813).affixes
567
568
        assert len(result) == 2
569
        assert isinstance(result, list)
570
        assert isinstance(result[0], Word)
571
572
    def test_keys(self):
573
        db_add_objects(Word, words)
574
        db_add_objects(Key, keys)
575
        db_add_objects(Definition, definitions)
576
        db_connect_keys(connect_keys)
577
578
        result = Word.get_by_id(7316).keys
579
580
        assert len(result) == 6
581
        assert isinstance(result, list)
582
        assert isinstance(result[0], Key)
583
584
    def test_get_sources_prim(self):
585
        db_add_objects(Word, words)
586
        db_add_objects(Type, types)
587
        db_add_objects(Word, prim_words)
588
        db_add_objects(Type, prim_types)
589
590
        afx = Word.get_by_id(3802)
591
        result = afx.get_sources_prim()
592
        assert result is None
593
594
        result = Word.get_by_id(3813).get_sources_prim()
595
        assert len(result) == 5
596
        assert isinstance(result, list)
597
        assert isinstance(result[0], WordSource)
598
599
        result = Word.get_by_id(291).get_sources_prim()
600
        assert isinstance(result, str)
601
        assert result == "balna: balnu"
602
603
        result = Word.get_by_id(318).get_sources_prim()
604
        assert isinstance(result, str)
605
        assert result == "banko: Int."
606
607
        result = Word.get_by_id(984).get_sources_prim()
608
        assert isinstance(result, str)
609
        assert result == "cimpe: abbreviation of cimpenizi"
610
611
        result = Word.get_by_id(5655).get_sources_prim()
612
        assert isinstance(result, str)
613
        assert result == "murmu: Onamatopoetic"
614
615
        result = Word.get_by_id(641).get_sources_prim()
616
        assert isinstance(result, str)
617
        assert result == "bordo: Fr. Bordeaux"
618
619
        result = Word.get_by_id(849).get_sources_prim()
620
        assert isinstance(result, str)
621
        assert result == "carbo: ISV"
622
623
    def test__get_sources_c_prim(self):
624
        db_add_objects(Word, words)
625
        db_add_objects(Type, types)
626
627
        result = Word.get_by_id(3813)._get_sources_c_prim()
628
629
        assert len(result) == 5
630
        assert isinstance(result, list)
631
        assert isinstance(result[0], WordSource)
632
633
        afx = Word.get_by_id(3802)
634
        result = afx._get_sources_c_prim()
635
        assert result is None
636
637
    def test_get_sources_cpx(self):
638
        db_add_objects(Word, words)
639
        db_add_objects(Type, types)
640
641
        result = Word.get_by_id(7316).get_sources_cpx()
642
        assert len(result) == 2
643
        assert isinstance(result, list)
644
        assert isinstance(result[0], Word)
645
646
        result = Word.get_by_id(7316).get_sources_cpx(as_str=True)
647
        assert len(result) == 2
648
        assert isinstance(result, list)
649
        assert isinstance(result[0], str)
650
        assert result == ['pruci', 'kakto', ]
651
652
        result = Word.get_by_id(3813).get_sources_cpx()
653
        assert result == []
654
655
    def test_get_sources_cpd(self):
656
        db_add_objects(Word, littles)
657
        db_add_objects(Type, little_types)
658
659
        result = Word.get_by_id(479).get_sources_cpd()
660
        assert len(result) == 2
661
        assert isinstance(result, list)
662
        assert isinstance(result[0], Word)
663
664
        result = Word.get_by_id(479).get_sources_cpd(as_str=True)
665
        assert len(result) == 2
666
        assert isinstance(result, list)
667
        assert isinstance(result[0], str)
668
        assert result == ['bi', 'cio']
669
670
        db_add_objects(Word, words)
671
        db_add_objects(Type, types)
672
673
        afx = Word.get_by_id(3802)
674
        result = afx.get_sources_cpd()
675
        assert result == []
676
677
    def test_by_event(self):
678
        db_add_objects(Word, changed_words + words)
679
        db_add_objects(Event, all_events)
680
681
        result = Word.get_all()
682
        assert len(result) == 13
683
684
        result = Word.by_event(1).all()
685
        assert len(result) == 10
686
687
        result = Word.by_event(5).all()
688
        assert len(result) == 9
689
690
        result = Word.by_event().all()
691
        assert len(result) == 9
692
693
    def test_by_name(self):
694
        db_add_objects(Word, doubled_words)
695
696
        result = Word.by_name("duo").count()
697
        assert result == 2
698
699
        result = Word.by_name("duo").all()
700
        assert isinstance(result, list)
701
        assert isinstance(result[0], Word)
702
703
        result = sorted([w.type_id for w in result])
704
        assert result == [2, 17]
705
706
        result = Word.by_name("duo").first()
707
        assert isinstance(result, Word)
708
709
        result = Word.by_name("Duo", case_sensitive=True).first()
710
        assert result is None
711
712
    def test_by_key(self):
713
        db_add_objects(Word, words)
714
        db_add_objects(Definition, definitions)
715
        db_add_objects(Key, keys)
716
        db_connect_keys(connect_keys)
717
718
        result = Word.by_key("test").count()
719
        assert result == 5
720
721
        result = Word.by_key("Test", case_sensitive=True).count()
722
        assert result == 0
723
724
        result = Word.by_key("Test").count()
725
        assert result == 5
726
727
        result = [w.name for w in Word.by_key("test").all()]
728
        assert result == ['pru', 'pruci', 'prukao']
729
730
        result = Word.by_key("test", language="es").count()
731
        assert result == 0
732
733
        result = Word.by_key("test", language="en").count()
734
        assert result == 5
735
736
737
@pytest.mark.usefixtures("db")
738
class TestWordSource:
739
    """WordSource tests."""
740
741
    def test_create_from_dict_with_data(self):
742
        """Get WordSource"""
743
        word_source = WordSource(**word_1_source_1)
744
        assert isinstance(word_source.coincidence, int)
745
        assert isinstance(word_source.length, int)
746
        assert isinstance(word_source.language, str)
747
        assert isinstance(word_source.transcription, str)
748
749
    def test_as_string(self):
750
        word_source = WordSource(**word_1_source_1)
751
        result = word_source.as_string
752
753
        assert isinstance(result, str)
754
        assert result == "2/2E do"
755