def test_existent_user_could_be_deleted(self): fake_email = '*****@*****.**' fake_password = '******' with vcr.use_cassette( 'fixtures/vcr_cassettes/create_fake_user_to_destroy2.json', before_record_response=scrub_string(fake_password), filter_post_data_parameters=['password', 'j_password']): Client.create_user(name='fake', email=fake_email, password=fake_password) with vcr.use_cassette( 'fixtures/vcr_cassettes/fake_user_login.json', before_record_response=scrub_string(fake_password), filter_post_data_parameters=['j_password'], record_mode='new_episodes'): user = Client(email=fake_email, password=fake_password).get_user() with vcr.use_cassette( 'fixtures/vcr_cassettes/user_destroy_valid2.json', before_record_response=scrub_string(fake_password), filter_post_data_parameters=['password'], ): user.destroy() with vcr.use_cassette( 'fixtures/vcr_cassettes/invalid_login_after_destroy.json', filter_post_data_parameters=['password', 'j_password'], ): with self.assertRaises(errors.UnauthorizedError): Client(email=fake_email, password=fake_password)
def test_tasks_filtered_by_deleted_status_without_refresh(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/tasks_with_deleted.json'): user.tasks(refresh=True, include_deleted=True) with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): none_deleted_tasks = user.tasks(include_deleted=False) self.assertEqual(None, next((task for task in none_deleted_tasks if task['status'] == 'DELETED'), None))
def test_no_need_to_refresh_tasks_after_creation(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/tasks.json'): initial_size = len(user.tasks()) with vcr.use_cassette('fixtures/vcr_cassettes/task_create_valid.json'): new_task = Task.create(user=user, title='New Task') self.assertTrue(new_task in user.tasks())
def test_subtask_could_be_created_directly(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_parent.json'): parent = Task.create(user=user, title='Parent') with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_subtask.json'): new_task = parent.create_subtask(title='New subtask') self.assertEqual(new_task, parent.subtasks()[0])
def __get_task(self, refresh=False): user = self.get_me() if refresh: with vcr.use_cassette('fixtures/vcr_cassettes/tasks_refreshed.json'): task = user.tasks(refresh=True)[0] else: with vcr.use_cassette('fixtures/vcr_cassettes/tasks.json'): task = user.tasks()[0] return task
def __get_category(self, refresh=False): user = self.get_me() if refresh: with vcr.use_cassette( 'fixtures/vcr_cassettes/categories_refreshed.json'): category = user.categories(refresh=True)[0] else: with vcr.use_cassette('fixtures/vcr_cassettes/categories.json'): category = user.categories()[0] return category
def test_no_need_to_refresh_categories_after_creation(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/categories.json'): initial_size = len(user.categories()) with vcr.use_cassette( 'fixtures/vcr_cassettes/category_create_valid.json'): category = Category.create(user=user, name='Test Category') self.assertTrue(category in user.categories())
def test_text_notes_could_be_added_to_task(self): user = self.get_me() note = 'first one' with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_for_notes.json'): task = Task.create(user=user, title='I have notes') with vcr.use_cassette('fixtures/vcr_cassettes/task_add_some_notes.json'): task.add_note(note) self.assertTrue(note in task.notes())
def test_task_have_subtasks_that_are_tasks_too(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_parent.json'): parent = Task.create(user=user, title='Parent') self.assertEqual([], parent.subtasks()) with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_subtask.json'): new_task = Task.create(user=parent.user, title='New subtask', parentGlobalTaskId=parent['id']) self.assertEqual(new_task, parent.subtasks()[0])
def test_subtask_could_be_created_directly(self): user = self.get_me() with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_parent.json'): parent = Task.create(user=user, title='Parent') with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_subtask.json'): new_task = parent.create_subtask(title='New subtask') self.assertEqual(new_task, parent.subtasks()[0])
def test_subtask_knows_about_its_parent(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_parent.json'): parent = Task.create(user=user, title='Parent') with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_subtask.json'): new_task = Task.create(user=parent.user, title='New subtask', parentGlobalTaskId=parent['id']) with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): self.assertEqual(parent, new_task.parent()) self.assertEqual(None, parent.parent())
def __get_task(self, refresh=False): user = self.get_me() if refresh: with vcr.use_cassette( 'fixtures/vcr_cassettes/tasks_refreshed.json'): task = user.tasks(refresh=True)[0] else: with vcr.use_cassette('fixtures/vcr_cassettes/tasks.json'): task = user.tasks()[0] return task
def test_task_could_be_marked_as_done(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/tasks_before_mark.json'): task = user.tasks()[0] self.assertEqual('UNCHECKED', task['status']) with vcr.use_cassette('fixtures/vcr_cassettes/task_mark_done.json'): task.done() with vcr.use_cassette('fixtures/vcr_cassettes/tasks_after_done.json'): task = next((t for t in user.tasks(refresh=True, include_done=True) if t['id'] == task['id']), None) self.assertEqual('DONE', task['status'])
def test_subtask_could_be_added_as_another_task(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_parent.json'): parent = Task.create(user=user, title='Parent') with vcr.use_cassette('fixtures/vcr_cassettes/task_create_new_subtask.json'): subtask = parent.create_subtask(title='New subtask') with vcr.use_cassette('fixtures/vcr_cassettes/task_add_subtask.json'): parent.add_subtask(subtask) self.assertEqual(subtask, parent.subtasks()[0])
def test_user_could_be_updated_successfully_by_attribute(self): new_title = 'First' task = self.__get_task() with vcr.use_cassette('fixtures/vcr_cassettes/task_update_valid.json'): task.title = new_title task.save() self.assertEqual(new_title, task.title) task = self.__get_task(refresh=True) with vcr.use_cassette('fixtures/vcr_cassettes/task_updated.json'): self.assertEqual(new_title, task.title)
def test_user_could_be_updated_successfully_by_attribute(self): new_name = 'New Name' user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/user_update_valid.json', filter_post_data_parameters=['j_password']): user.name = new_name user.save() self.assertEqual(new_name, user.name) with vcr.use_cassette('fixtures/vcr_cassettes/me_updated.json', ): user = self.get_session().get_user(refresh=True) self.assertEqual(new_name, user.name)
def test_text_notes_could_be_added_to_task(self): user = self.get_me() note = 'first one' with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_for_notes.json'): task = Task.create(user=user, title='I have notes') with vcr.use_cassette( 'fixtures/vcr_cassettes/task_add_some_notes.json'): task.add_note(note) self.assertTrue(note in task.notes())
def test_tasks_filtered_by_deleted_status_without_refresh(self): user = self.get_me() with vcr.use_cassette( 'fixtures/vcr_cassettes/tasks_with_deleted.json'): user.tasks(refresh=True, include_deleted=True) with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): none_deleted_tasks = user.tasks(include_deleted=False) self.assertEqual( None, next((task for task in none_deleted_tasks if task['status'] == 'DELETED'), None))
def test_subtask_could_be_added_as_another_task(self): user = self.get_me() with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_parent.json'): parent = Task.create(user=user, title='Parent') with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_subtask.json'): subtask = parent.create_subtask(title='New subtask') with vcr.use_cassette('fixtures/vcr_cassettes/task_add_subtask.json'): parent.add_subtask(subtask) self.assertEqual(subtask, parent.subtasks()[0])
def test_category_could_be_added_to_category(self): category = self.__get_category() with vcr.use_cassette('fixtures/vcr_cassettes/task_create_valid.json'): task = Task.create(user=category.user, title='Task For Category', priority='Normal', status='UNCHECKED') with vcr.use_cassette( 'fixtures/vcr_cassettes/category_move_task_to_category.json'): category.add_task(task) self.assertEqual(category, task.category()) self.assertTrue(task in category.tasks())
def test_categories_could_be_filtered_by_deleted_status_with_refresh(self): user = self.get_me() with vcr.use_cassette( 'fixtures/vcr_cassettes/category_deleted_ones.json'): deleted = user.categories(refresh=True, include_deleted=True) self.assertTrue(len(deleted) > 0) with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): deleted2 = user.categories(include_deleted=True) self.assertEqual(deleted, deleted2) self.assertTrue(len([cat for cat in deleted2 if cat['isDeleted']]) > 0)
def test_new_task_could_be_deleted_permanently_after_creation(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/task_create_for_delete2.json'): Task.create(user=user, title='Delete me2', status='UNCHECKED') with vcr.use_cassette('fixtures/vcr_cassettes/tasks_after_new_one_created2.json'): task = user.tasks(refresh=True)[-1] self.assertEqual('Delete me2', task.title) with vcr.use_cassette('fixtures/vcr_cassettes/task_destroy_valid2.json'): task.destroy() with vcr.use_cassette('fixtures/vcr_cassettes/tasks_after_new_one_deleted2.json'): tasks = user.tasks(refresh=True) self.assertFalse(task['id'] in map(lambda task: task['id'], tasks))
def test_task_have_subtasks_that_are_tasks_too(self): user = self.get_me() with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_parent.json'): parent = Task.create(user=user, title='Parent') self.assertEqual([], parent.subtasks()) with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_subtask.json'): new_task = Task.create(user=parent.user, title='New subtask', parentGlobalTaskId=parent['id']) self.assertEqual(new_task, parent.subtasks()[0])
def test_unchanged_data_dont_hit_an_api(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): name = user.name user['name'] = name[:] user.save()
def test_duplicate_user_creation_raises_conflict(self): with vcr.use_cassette('fixtures/vcr_cassettes/duplicate_user.json', filter_post_data_parameters=['password']): with self.assertRaises(errors.ConflictError): Client.create_user(name=self.username, email=self.email, password=self.password)
def test_user_has_appropriate_attributes(self): with vcr.use_cassette('fixtures/vcr_cassettes/me.json', filter_post_data_parameters=['j_password']): user = self.get_me() self.assertEqual(self.username, user['name']) self.assertEqual(self.email, user['email'])
def test_user_attributes_accessible_directly(self): with vcr.use_cassette('fixtures/vcr_cassettes/me.json', filter_post_data_parameters=['j_password']): user = self.get_me() self.assertEqual(self.username, user.name) self.assertEqual(self.email, user.email)
def test_user_categories_are_cached_and_not_require_additional_request( self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/categories.json', record_mode='once'): user.categories() user.categories()
def test_unchanged_data_dont_hit_an_api(self): category = self.__get_category() with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): name = category.name category['name'] = name[:] category.save()
def test_valid_session_initialized_silently(self): with vcr.use_cassette( 'fixtures/vcr_cassettes/valid_login.json', filter_post_data_parameters=['j_password'] ): client = Client(email=self.email, password=self.password) self.assertIsInstance(client, Client)
def test_subtask_knows_about_its_parent(self): user = self.get_me() with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_parent.json'): parent = Task.create(user=user, title='Parent') with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_new_subtask.json'): new_task = Task.create(user=parent.user, title='New subtask', parentGlobalTaskId=parent['id']) with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): self.assertEqual(parent, new_task.parent()) self.assertEqual(None, parent.parent())
def test_unchanged_data_dont_hit_an_api(self): task = self.__get_task() with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): title = task.title task['title'] = title[:] task.save()
def test_me_returns_user_object(self): with vcr.use_cassette( 'fixtures/vcr_cassettes/me.json', filter_post_data_parameters=['j_password'] ): user = self.get_session().get_user() self.assertIsInstance(user, User)
def test_task_creation_returns_task_instance(self): with vcr.use_cassette('fixtures/vcr_cassettes/task_create_valid.json'): task = Task.create(user=self.get_me(), title='Test Task', category='Personal', priority='Normal', status='UNCHECKED') self.assertIsInstance(task, Task)
def test_user_tasks_could_be_refreshed_from_the_server(self): with self.assertRaises( vcr_module.errors.CannotOverwriteExistingCassetteException): with vcr.use_cassette('fixtures/vcr_cassettes/tasks.json', record_mode='once'): user = self.get_me() user.tasks(refresh=True) user.tasks(refresh=True)
def test_client_session_is_cached_and_not_requires_additional_request(self): with vcr.use_cassette('fixtures/vcr_cassettes/me.json', filter_post_data_parameters=['password'], record_mode='once' ): user = self.get_session() user.get_user() user.get_user()
def test_client_session_is_cached_and_not_requires_additional_request( self): with vcr.use_cassette('fixtures/vcr_cassettes/me.json', filter_post_data_parameters=['password'], record_mode='once'): user = self.get_session() user.get_user() user.get_user()
def test_task_could_be_approved_by_user(self): old_member = self.get_me() with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_for_sharing.json'): task = Task.create(user=old_member, title='Shared Task', category='Personal', priority='Normal', status='UNCHECKED') fake_email = '*****@*****.**' fake_password = '******' with vcr.use_cassette( 'fixtures/vcr_cassettes/task_create_user_for_sharing_and_approve.json', before_record_response=scrub_string(fake_password), filter_post_data_parameters=['password', 'j_password']): new_member = Client.create_user(name='fake', email=fake_email, password=fake_password) with vcr.use_cassette( 'fixtures/vcr_cassettes/task_share_with_user_to_approve.json'): task.share_with(new_member) with vcr.use_cassette( 'fixtures/vcr_cassettes/task_user_pending_tasks_before_approve.json' ): self.assertTrue( len(new_member.pending_tasks_ids(refresh=True)) == 1) with vcr.use_cassette( 'fixtures/vcr_cassettes/task_user_approve_pending_task.json'): new_member.approve_pending_task( pending_task_id=new_member.pending_tasks_ids()[0]) with vcr.use_cassette( 'fixtures/vcr_cassettes/task_user_pending_tasks_after_approve.json' ): self.assertTrue( len(new_member.pending_tasks_ids(refresh=True)) == 0) with vcr.use_cassette( 'fixtures/vcr_cassettes/task_members_after_refresh.json'): task.refresh() self.assertEqual([{ old_member['email']: old_member['name'] }, { new_member['email']: new_member['name'] }], task.members()) with vcr.use_cassette( 'fixtures/vcr_cassettes/tasks_of_new_member.json'): shared_task = new_member.tasks(refresh=True)[0] self.assertEqual(task['title'], shared_task['title'])
def test_category_creation_returns_category_instance(self): with vcr.use_cassette( 'fixtures/vcr_cassettes/category_create_valid.json'): category = Category.create( user=self.get_me(), name='Test Category', ) self.assertIsInstance(category, Category) self.assertEqual('Test Category', category['name'])
def test_task_creation_returns_task_instance(self): with vcr.use_cassette('fixtures/vcr_cassettes/task_create_valid.json'): task = Task.create(user=self.get_me(), title='Test Task', category='Personal', priority='Normal', status='UNCHECKED' ) self.assertIsInstance(task, Task)
def test_user_data_could_be_refreshed_from_the_server(self): with self.assertRaises(vcr_module.errors.CannotOverwriteExistingCassetteException): with vcr.use_cassette('fixtures/vcr_cassettes/me.json', filter_post_data_parameters=['password'], record_mode='once' ): user = self.get_session() user.get_user(refresh=True) user.get_user(refresh=True)
def test_category_could_be_updated_successfully_by_index(self): user = self.get_me() new_name = 'Home' # lastUpdateDate should be the actual one with vcr.use_cassette( 'fixtures/vcr_cassettes/categories_before_update.json'): category = user.categories(refresh=True)[0] with vcr.use_cassette( 'fixtures/vcr_cassettes/category_update_valid.json'): category['name'] = new_name category.save() self.assertEqual(new_name, category['name']) with vcr.use_cassette('fixtures/vcr_cassettes/category_updated.json'): category = next((cat for cat in user.categories(refresh=True) if cat['id'] == category['id']), None) self.assertEqual(new_name, category['name'])
def test_user_knows_about_its_pending_tasks(self): task = self.__get_task() fake_email = '*****@*****.**' fake_password = '******' with vcr.use_cassette('fixtures/vcr_cassettes/task_create_user_for_share.json', before_record_response=scrub_string(fake_password), filter_post_data_parameters=['password', 'j_password'] ): new_member = Client.create_user(name='fake', email=fake_email, password=fake_password) with vcr.use_cassette('fixtures/vcr_cassettes/task_share_with_user.json'): task.share_with(new_member) with vcr.use_cassette('fixtures/vcr_cassettes/task_user_pending_tasks.json'): self.assertTrue(len(new_member.pending_tasks_ids()) == 1) self.assertEqual(task['title'], new_member.pending_tasks()[0]['title'])
def test_user_data_could_be_refreshed_from_the_server(self): with self.assertRaises( vcr_module.errors.CannotOverwriteExistingCassetteException): with vcr.use_cassette('fixtures/vcr_cassettes/me.json', filter_post_data_parameters=['password'], record_mode='once'): user = self.get_session() user.get_user(refresh=True) user.get_user(refresh=True)
def test_tasks_filtered_by_checked_status(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/tasks_after_check.json'): none_checked_tasks = user.tasks( refresh=True, include_done=False, include_deleted=False, include_checked=False ) self.assertEqual(None, next((task for task in none_checked_tasks if task['status'] == 'CHECKED'), None)) with vcr.use_cassette('fixtures/vcr_cassettes/tasks_after_check.json'): checked_tasks = user.tasks( refresh=True, include_done=False, include_deleted=False, include_unchecked=False ) self.assertEqual(None, next((task for task in checked_tasks if task['status'] == 'UNCHECKED'), None))
def test_task_creation_reraises_occured_errors(self): # Emulate Server Error bypassing internal validaitons for missed fields original = Task.required_attributes def fake(): return set() Task.required_attributes = staticmethod(fake) with vcr.use_cassette('fixtures/vcr_cassettes/task_create_invalid.json'): with self.assertRaises(errors.InternalServerError): Task.create(user=self.get_me(), status='UNCHECKED', ) Task.required_attributes = staticmethod(original)
def test_task_creation_saves_attributers_correctly(self): title = 'New Task' note = 'Hello world' with vcr.use_cassette('fixtures/vcr_cassettes/task_create_valid_with_attributes.json'): task = Task.create(user=self.get_me(), title=title, category='Personal', priority='Normal', status='UNCHECKED', repeatingMethod='TASK_REPEAT_OFF', note=note, ) self.assertEqual(title, task.title) self.assertEqual(note, task['note'])
def test_task_could_be_approved_by_user(self): old_member = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/task_create_for_sharing.json'): task = Task.create(user=old_member, title='Shared Task', category='Personal', priority='Normal', status='UNCHECKED' ) fake_email = '*****@*****.**' fake_password = '******' with vcr.use_cassette('fixtures/vcr_cassettes/task_create_user_for_sharing_and_approve.json', before_record_response=scrub_string(fake_password), filter_post_data_parameters=['password', 'j_password'] ): new_member = Client.create_user(name='fake', email=fake_email, password=fake_password) with vcr.use_cassette('fixtures/vcr_cassettes/task_share_with_user_to_approve.json'): task.share_with(new_member) with vcr.use_cassette('fixtures/vcr_cassettes/task_user_pending_tasks_before_approve.json'): self.assertTrue(len(new_member.pending_tasks_ids(refresh=True)) == 1) with vcr.use_cassette('fixtures/vcr_cassettes/task_user_approve_pending_task.json'): new_member.approve_pending_task(pending_task_id=new_member.pending_tasks_ids()[0]) with vcr.use_cassette('fixtures/vcr_cassettes/task_user_pending_tasks_after_approve.json'): self.assertTrue(len(new_member.pending_tasks_ids(refresh=True)) == 0) with vcr.use_cassette('fixtures/vcr_cassettes/task_members_after_refresh.json'): task.refresh() self.assertEqual([ { old_member['email']: old_member['name'] }, { new_member['email']: new_member['name'] }], task.members() ) with vcr.use_cassette('fixtures/vcr_cassettes/tasks_of_new_member.json'): shared_task = new_member.tasks(refresh=True)[0] self.assertEqual(task['title'], shared_task['title'])
def test_user_has_access_to_its_tasks(self): user = self.get_me() with vcr.use_cassette('fixtures/vcr_cassettes/tasks.json'): self.assertIsInstance(user.tasks(), list)
def test_user_tasks_are_cached_and_not_require_additional_request(self): with vcr.use_cassette('fixtures/vcr_cassettes/tasks.json', record_mode='once'): user = self.get_me() user.tasks() user.tasks()
def test_user_tasks_could_be_refreshed_from_the_server(self): with self.assertRaises(vcr_module.errors.CannotOverwriteExistingCassetteException): with vcr.use_cassette('fixtures/vcr_cassettes/tasks.json', record_mode='once'): user = self.get_me() user.tasks(refresh=True) user.tasks(refresh=True)
def test_new_client_reraises_occured_errors(self): with vcr.use_cassette('fixtures/vcr_cassettes/invalid_login.json'): with self.assertRaises(errors.UnauthorizedError): Client(email='***', password='******')
def test_task_creation_checks_required_fields(self): with vcr.use_cassette('fixtures/vcr_cassettes/fake.json', record_mode='none'): with self.assertRaises(errors.ModelAttributeError): Task.create(user=self.get_me(), status='UNCHECKED')