def test_get_errors__verificators_errors(self): key = keys.LEXICON_KEY.HERO_COMMON_JOURNAL_LEVEL_UP TEXT = u'[hero|загл] [level] [неизвестное слово|hero|вн]' template = utg_templates.Template() template.parse(TEXT, externals=['hero']) verificator_1 = prototypes.Verificator(text=u'абракадабра', externals={ 'hero': (u'героиня', u''), 'level': (1, u'') }) verificator_2 = prototypes.Verificator( text=u'Рыцари 5 w-1-полнприл,мн,вн,од,пол', externals={ 'hero': (u'рыцарь', u'мн'), 'level': (5, u'') }) verificator_3 = prototypes.Verificator(text=u'Герой 2 w-1-ед,вн', externals={ 'hero': (u'герой', u''), 'level': (2, u'') }) verificator_4 = prototypes.Verificator(text=u'', externals={ 'hero': (u'привидение', u''), 'level': (5, u'') }) dictionary = storage.game_dictionary.item word = utg_words.Word.create_test_word( type=utg_relations.WORD_TYPE.ADJECTIVE, prefix=u'w-1-', only_required=True) word.forms[0] = u'неизвестное слово' dictionary.add_word(word) prototype = prototypes.TemplatePrototype.create(key=key, utg_template=template, raw_template=TEXT, verificators=[ verificator_1, verificator_2, verificator_3, verificator_4 ], author=self.account_1) errors = prototype.get_errors() self.assertEqual(errors, [ u'Проверочный текст не совпадает с интерпретацией шаблона<br/>Героиня 1 w-1-полнприл,ед,вн,жр,од,пол<br/>абракадабра', u'Проверочный текст не совпадает с интерпретацией шаблона<br/>Герой 2 w-1-полнприл,ед,вн,мр,од,пол<br/>Герой 2 w-1-ед,вн', u'Проверочный текст не совпадает с интерпретацией шаблона<br/>Привидение 5 w-1-полнприл,ед,вн,ср,од,пол<br/>' ])
def test_save(self): prototype = prototypes.TemplatePrototype.create( key=self.key_1, raw_template=self.text_1, utg_template=self.template_1, verificators=[], author=self.account_1) prototype.utg_template.template = u'xxx' prototype.verificators.append( prototypes.Verificator(text=u'test-verificator', externals={})) with mock.patch( 'the_tale.linguistics.workers.linguistics_manager.Worker.cmd_game_lexicon_changed' ) as cmd_game_lexicon_changed: with mock.patch( 'the_tale.linguistics.prototypes.TemplatePrototype.update_errors_status' ) as update_errors_status: with self.check_not_changed( prototypes.TemplatePrototype._db_count): prototype.save() prototype.reload() self.assertEqual(cmd_game_lexicon_changed.call_count, 1) self.assertEqual(update_errors_status.call_count, 1) self.assertEqual(prototype.utg_template.template, u'xxx') self.assertEqual( prototype.verificators, [prototypes.Verificator(text=u'test-verificator', externals={})])
def test_get_errors__no_errors(self): key = keys.LEXICON_KEY.HERO_COMMON_JOURNAL_LEVEL_UP TEXT = u'[hero|загл] [level] [неизвестное слово|hero|вн]' template = utg_templates.Template() template.parse(TEXT, externals=['hero']) verificator_1 = prototypes.Verificator( text=u'Героиня 1 w-1-полнприл,пол,од,ед,вн,жр', externals={ 'hero': (u'героиня', u''), 'level': (1, u'') }) verificator_2 = prototypes.Verificator( text=u'Рыцари 5 w-1-полнприл,пол,од,мн,вн', externals={ 'hero': (u'рыцарь', u'мн'), 'level': (5, u'') }) verificator_3 = prototypes.Verificator( text=u'Герой 2 w-1-полнприл,пол,од,ед,вн,мр', externals={ 'hero': (u'герой', u''), 'level': (2, u'') }) verificator_4 = prototypes.Verificator( text=u'Привидение 5 w-1-полнприл,пол,од,ед,вн,ср', externals={ 'hero': (u'привидение', u''), 'level': (5, u'') }) dictionary = storage.game_dictionary.item word = utg_words.Word.create_test_word( type=utg_relations.WORD_TYPE.ADJECTIVE, prefix=u'w-1-', only_required=True) word.forms[0] = u'неизвестное слово' dictionary.add_word(word) prototype = prototypes.TemplatePrototype.create(key=key, raw_template=TEXT, utg_template=template, verificators=[ verificator_1, verificator_2, verificator_3, verificator_4 ], author=self.account_1) self.assertTrue(prototype.errors_status.is_NO_ERRORS) errors = prototype.get_errors() self.assertEqual(errors, [])
def test_update(self): prototype = prototypes.TemplatePrototype.create(key=self.key_1, raw_template=self.text_1, utg_template=self.template_1, verificators=[], author=None) text, template = self.create_template(self.key_1, word=self.word_2) restriction_1, restriction_2, restriction_3 = storage.restrictions_storage.all()[:3] with mock.patch('the_tale.linguistics.workers.linguistics_manager.Worker.cmd_game_lexicon_changed') as cmd_game_lexicon_changed: with mock.patch('the_tale.linguistics.prototypes.TemplatePrototype.update_errors_status') as update_errors_status: prototype.update(raw_template=text, utg_template=template, verificators=[prototypes.Verificator(text='test-verificator', externals={}),], restrictions=(('hero', restriction_1.id), ('level', restriction_2.id), ('hero', restriction_3.id))) prototype.reload() self.assertEqual(cmd_game_lexicon_changed.call_count, 1) self.assertEqual(update_errors_status.call_count, 1) self.assertEqual(prototype.raw_template, text) self.assertEqual(prototype.raw_restrictions, frozenset((('hero', restriction_1.id), ('level', restriction_2.id), ('hero', restriction_3.id)))) self.assertEqual(prototype.utg_template, template) self.assertEqual(prototype.verificators, [prototypes.Verificator(text='test-verificator', externals={})])
def test_get_verificators__without_old(self): groups = lexicon_logic.get_verificators_groups(key=keys.LEXICON_KEY.HERO_COMMON_JOURNAL_LEVEL_UP, old_groups={}) self.assertEqual(groups, {'date': (8, 0), 'hero': (0, 0), 'level': (1, 0)}) verificators = prototypes.Verificator.get_verificators(key=self.key, groups=groups) self.assertEqual(len(verificators), 4) self.assertEqual(verificators[0], prototypes.Verificator(text='', externals={'date': ('18 сухого месяца 183 года', ''), 'hero': ('герой', ''), 'level': (1, '')})) self.assertEqual(verificators[1], prototypes.Verificator(text='', externals={'date': ('18 сухого месяца 183 года', ''), 'hero': ('привидение', ''), 'level': (2, '')})) self.assertEqual(verificators[2], prototypes.Verificator(text='', externals={'date': ('18 сухого месяца 183 года', ''), 'hero': ('героиня', ''), 'level': (5, '')})) self.assertEqual(verificators[3], prototypes.Verificator(text='', externals={'date': ('18 сухого месяца 183 года', ''), 'hero': ('рыцарь', 'мн'), 'level': (1, '')}))
def test_get_verificators__one_substitutions_type(self): groups = lexicon_logic.get_verificators_groups(key=keys.LEXICON_KEY.PVP_USE_ABILITY_BLOOD, old_groups={}) self.assertEqual(groups, {'date': (8, 0), 'duelist_1': (0, 0), 'duelist_2': (0, 1), 'effectiveness': (1, 0)}) verificators = prototypes.Verificator.get_verificators(key=self.key, groups=groups) self.assertEqual(len(verificators), 4) self.assertEqual(verificators[0], prototypes.Verificator(text='', externals={'date': ('18 сухого месяца 183 года', ''), 'duelist_1': ('герой', ''), 'duelist_2': ('чудовище', ''), 'effectiveness': (1, '')})) self.assertEqual(verificators[1], prototypes.Verificator(text='', externals={'date': ('18 сухого месяца 183 года', ''), 'duelist_1': ('привидение', ''), 'duelist_2': ('русалка', ''), 'effectiveness': (2, '')})) self.assertEqual(verificators[2], prototypes.Verificator(text='', externals={'date': ('18 сухого месяца 183 года', ''), 'duelist_1': ('героиня', ''), 'duelist_2': ('боец', 'мн'),'effectiveness': (5, '')})) self.assertEqual(verificators[3], prototypes.Verificator(text='', externals={'date': ('18 сухого месяца 183 года', ''), 'duelist_1': ('рыцарь', 'мн'), 'duelist_2': ('призрак', ''), 'effectiveness': (1, '')}))
def test_get_errors__no_word_errors(self): key = keys.LEXICON_KEY.HERO_COMMON_JOURNAL_LEVEL_UP TEXT = u'[hero|загл] [level] [неизвестное слово|hero|вн]' template = utg_templates.Template() template.parse(TEXT, externals=['hero']) # verificators with error that would not be returned becouse of words_errors verificator_1 = prototypes.Verificator(text=u'абракадабра', externals={ 'hero': (u'героиня', u''), 'level': (1, u'') }) verificator_2 = prototypes.Verificator(text=u'Рыцарь 5 w-1-ед,вн', externals={ 'hero': (u'рыцарь', u'мн'), 'level': (5, u'') }) verificator_3 = prototypes.Verificator(text=u'Герой 2 w-1-ед,вн', externals={ 'hero': (u'герой', u''), 'level': (2, u'') }) verificator_4 = prototypes.Verificator(text=u'', externals={ 'hero': (u'привидение', u''), 'level': (5, u'') }) prototype = prototypes.TemplatePrototype.create(key=key, raw_template=TEXT, utg_template=template, verificators=[ verificator_1, verificator_2, verificator_3, verificator_4 ], author=self.account_1) errors = prototype.get_errors() self.assertEqual(errors, [u'Неизвестное слово: «неизвестное слово»'])
def test_get_errors__duplicate_word(self): key = keys.LEXICON_KEY.HERO_COMMON_JOURNAL_LEVEL_UP dictionary = storage.game_dictionary.item word_1 = utg_words.Word.create_test_word(type=utg_relations.WORD_TYPE.NOUN, prefix='w-1-', only_required=True) word_1.forms[2] = 'дубль' self.assertEqual(word_1.form(utg_relations.CASE.DATIVE), 'дубль') word_2 = utg_words.Word.create_test_word(type=utg_relations.WORD_TYPE.NOUN, prefix='w-2-', only_required=True) word_2.forms[2] = 'дубль' self.assertEqual(word_2.form(utg_relations.CASE.DATIVE), 'дубль') dictionary.add_word(word_1) dictionary.add_word(word_2) TEXT = '[hero|загл] [level] [дубль|hero|дт]' template = utg_templates.Template() template.parse(TEXT, externals=['hero']) # verificators with error that would not be returned becouse of words_errors verificator_1 = prototypes.Verificator(text='Героиня 1 дубль', externals={'hero': ('героиня', ''), 'level': (1, '')}) verificator_2 = prototypes.Verificator(text='Рыцари 5 w-1-нс,мн,дт', externals={'hero': ('рыцарь', 'мн'), 'level': (5, '')}) verificator_3 = prototypes.Verificator(text='Герой 2 дубль', externals={'hero': ('герой', ''), 'level': (2, '')}) verificator_4 = prototypes.Verificator(text='Привидение 5 дубль', externals={'hero': ('привидение', ''), 'level': (5, '')}) prototype = prototypes.TemplatePrototype.create(key=key, raw_template=TEXT, utg_template=template, verificators=[verificator_1, verificator_2, verificator_3, verificator_4], author=self.account_1) errors = prototype.get_errors() self.assertEqual(errors, [])
def test_get_verificators__with_old(self): groups = lexicon_logic.get_verificators_groups( key=keys.LEXICON_KEY.HERO_COMMON_JOURNAL_LEVEL_UP, old_groups={}) self.assertEqual(groups, {'hero': (0, 0), 'level': (1, 0)}) old_verificators = [ prototypes.Verificator(text=u'1', externals={ 'hero': (u'привидение', u''), 'level': (1, u'') }), prototypes.Verificator(text=u'2', externals={ 'hero': (u'героиня', u''), 'level': (1, u'') }), prototypes.Verificator(text=u'3', externals={ 'hero': (u'рыцарь', u'ед'), 'level': (5, u'') }), prototypes.Verificator(text=u'4', externals={ 'hero': (u'абракадабра', u''), 'level': (5, u'') }), prototypes.Verificator(text=u'5', externals={ 'hero': (u'герой', u''), 'level': (2, u'') }) ] verificators = prototypes.Verificator.get_verificators( key=self.key, groups=groups, old_verificators=old_verificators) self.assertEqual(len(verificators), 4) self.assertEqual( verificators[0], prototypes.Verificator(text=u'1', externals={ 'hero': (u'привидение', u''), 'level': (1, u'') })) self.assertEqual( verificators[1], prototypes.Verificator(text=u'5', externals={ 'hero': (u'герой', u''), 'level': (2, u'') })) self.assertEqual( verificators[2], prototypes.Verificator(text=u'', externals={ 'hero': (u'рыцарь', u'мн'), 'level': (5, u'') })) self.assertEqual( verificators[3], prototypes.Verificator(text=u'', externals={ 'hero': (u'героиня', u''), 'level': (5, u'') }))