def run(self): while not self.stop.is_set(): if SAVE_NEEDED.is_set(): print('Save needed, save data') SaveLoad(self._collection).save_data() SAVE_NEEDED.clear() time.sleep(5)
def _prepare_article_with_all_fields(self): article = Article(title=self.initial_article_test_data.title, description=self.initial_article_test_data.description, page=self.initial_article_test_data.page, binder=self.initial_article_test_data.binder, tags=self.initial_article_test_data.tags) SAVE_NEEDED.clear() return article
def test_create_article_with_title_only(self): article = Article(title=self.valid_article_test_data.title) self.assertIsInstance( article, Article, 'Verify added article is instance of Article class') Verifiers().verify_article_with_title_only( article=article, reference_article=self.valid_article_test_data) self.assertTrue(SAVE_NEEDED.is_set(), 'Verify save needed is set')
def test_create_article_no_title(self): with self.assertRaises( TypeError, msg= 'Verify exception is raised when creating Article instance without title' ): Article() self.assertFalse(SAVE_NEEDED.is_set())
def test_add_article_with_the_same_uuid(self): article_dict = ArticleDict() article1 = Article(title='test1') article2 = Article(title='test2') article2._uuid = article1.uuid article_dict[article1.uuid] = article1 SAVE_NEEDED.clear() with self.assertRaises( DuplicatedArticle, msg= f'Verify exception is raised when adding article with the same uuid as existing' ): article_dict[article2.uuid] = article2 self.assertFalse( SAVE_NEEDED.is_set(), f'Verify save is not needed after exception of duplicated uuid') self.assertEqual( len(article_dict), 1, 'Verify duplicated article was not added to ArticleDict')
def test_create_article_with_all_fields(self): article = Article(title=self.valid_article_test_data.title, description=self.valid_article_test_data.description, page=self.valid_article_test_data.page, binder=self.valid_article_test_data.binder, tags=self.valid_article_test_data.tags) self.assertIsInstance( article, Article, 'Verify added article is instance of Article class') Verifiers().verify_article_with_all_fields( article=article, reference_article=self.valid_article_test_data) self.assertTrue(SAVE_NEEDED.is_set(), 'Verify save needed is set')
def test_create_article_invalid_types(self): self._type_assertion_test( self.invalid_article_test_data.title, msg='Verify exception is raised when title is incorrect type') self._type_assertion_test( self.valid_article_test_data.title, description=self.invalid_article_test_data.description, msg='Verify exception is raised when description is incorrect type' ) self._type_assertion_test( self.valid_article_test_data.title, page=self.invalid_article_test_data.page, msg='Verify exception is raised when page is incorrect type') self._type_assertion_test( self.valid_article_test_data.title, binder=self.invalid_article_test_data.binder, msg='Verify exception is raised when binder is incorrect type') self._type_assertion_test( self.valid_article_test_data.title, tags=self.invalid_article_test_data.tags, msg='Verify exception is raised when tags is incorrect type') self.assertFalse(SAVE_NEEDED.is_set())
def __setattr__(self, key, value): super(Article, self).__setattr__(key, value) SAVE_NEEDED.set()
def test_uuid_cannot_be_modified(self): article = self._prepare_article_with_title_only() with self.assertRaises(AttributeError, msg='Verify uuid cannot be modified'): article.uuid = 'modified uuid' self.assertFalse(SAVE_NEEDED.is_set(), 'Verify save is not needed after trying to modify uuid')
def _prepare_article_with_title_only(self): article = Article(title=self.initial_article_test_data.title) SAVE_NEEDED.clear() return article
def _type_assertion_test(self, article, attribute, value): with self.assertRaises(TypeError, msg=f'Verify exception is raised when modifying {attribute} with incorrect type of value'): setattr(article, attribute, value) self.assertFalse(SAVE_NEEDED.is_set(), f'Verify save is not needed after exception of incorrect type for attribute {attribute}')
def _save_needed_test(self, msg): self.assertTrue(SAVE_NEEDED.is_set(), msg) SAVE_NEEDED.clear()
def tearDown(self) -> None: SAVE_NEEDED.clear()
def __setitem__(self, key, value): if key in self.keys(): raise DuplicatedArticle(f'Key "{key}" already exists') super().__setitem__(key, value) SAVE_NEEDED.set()
def __delitem__(self, key): super().__delitem__(key) SAVE_NEEDED.set()