def test_delete_skills(self): """ tests the storage.delete() method removes and commits obj to database for an object from the Skills class """ # connect to MySQL database through MySQLdb and get initial count db = connect(host=ION_MYSQL_HOST, user=ION_MYSQL_USER, passwd=ION_MYSQL_PWD, db=ION_MYSQL_DB) cur = db.cursor() cur.execute("""SELECT * FROM skills""") objs_for_count1 = cur.fetchall() # creates new instance of Skills new_obj = Skills() # tests that the new object is of type Skills self.assertIs(type(new_obj), Skills) # adds all attributes required for testing # (id should be set by primary key) # (created_at, updated_at should be set by datetime) new_obj.name = "test_name" # save the object with BaseModel save method # save method calls storage.new() and storage.save() new_obj.save() # closes connection to database and restarts connection with MySQLdb cur.close() db.close() db = connect(host=ION_MYSQL_HOST, user=ION_MYSQL_USER, passwd=ION_MYSQL_PWD, db=ION_MYSQL_DB) cur = db.cursor() cur.execute("""SELECT * FROM skills""") objs_for_count2 = cur.fetchall() # tests that there is one more obj saved to skills table in db self.assertEqual(len(objs_for_count1) + 1, len(objs_for_count2)) # delete the object with BaseModel delete method # delete instance method calls storage.delete() and storage.save() new_obj.delete() # closes connection to database and restarts connection with MySQLdb cur.close() db.close() db = connect(host=ION_MYSQL_HOST, user=ION_MYSQL_USER, passwd=ION_MYSQL_PWD, db=ION_MYSQL_DB) cur = db.cursor() cur.execute("""SELECT * FROM skills""") objs_for_count3 = cur.fetchall() # tests that there is one less obj in skills table in db self.assertEqual(len(objs_for_count2) - 1, len(objs_for_count3)) self.assertEqual(len(objs_for_count1), len(objs_for_count3)) # closes the connection cur.close() db.close()
def test_all_skills_count(self): """ tests all method retrieves all objects when class is Skills """ # connect to MySQL database through MySQLdb and get initial count db = connect(host=ION_MYSQL_HOST, user=ION_MYSQL_USER, passwd=ION_MYSQL_PWD, db=ION_MYSQL_DB) cur = db.cursor() cur.execute("""SELECT * FROM identities""") identity_objs = cur.fetchall() cur.execute("""SELECT * FROM profiles""") profile_objs = cur.fetchall() cur.execute("""SELECT * FROM skills""") skills_objs = cur.fetchall() total_count = len(identity_objs) + len(profile_objs) + len(skills_objs) total_skills_count = len(skills_objs) # call storage.all() method, both with and without class specified all_objs = storage.all() count1 = len(all_objs.keys()) all_skills_objs = storage.all(Skills) skills_count1 = len(all_skills_objs.keys()) # tests that counts from all method match current database self.assertEqual(total_count, count1) self.assertEqual(total_skills_count, skills_count1) # creates new Skills obj to test with new_obj = Skills() # adds all attributes required for testing # (id should be set by primary key) # (created_at, updated_at should be set by datetime) new_obj.name = "test_name" # saves new object to the database new_obj.save() # re-call storage.all() method all_objs = storage.all() count2 = len(all_objs.keys()) all_skills_objs = storage.all(Skills) skills_count2 = len(all_skills_objs.keys()) # tests that counts increased by 1 self.assertEqual(count1 + 1, count2) self.assertEqual(skills_count1 + 1, skills_count2) # deletes new object from the database new_obj.delete() # re-call storage.all() method all_objs = storage.all() count3 = len(all_objs.keys()) all_skills_objs = storage.all(Skills) skills_count3 = len(all_skills_objs.keys()) # tests that count decreased by 1 self.assertEqual(count2 - 1, count3) self.assertEqual(count1, count3) self.assertEqual(skills_count2 - 1, skills_count3) self.assertEqual(skills_count1, skills_count3)
def test_all_skills_dict(self): """ tests return of all method when class is Skills """ # connect to MySQL database through MySQLdb and get initial count db = connect(host=ION_MYSQL_HOST, user=ION_MYSQL_USER, passwd=ION_MYSQL_PWD, db=ION_MYSQL_DB) cur = db.cursor() cur.execute("""SELECT * FROM skills""") skills_objs = cur.fetchall() total_skills_count = len(skills_objs) # call storage.all() method all_skills_objs = storage.all(Skills) skills_count1 = len(all_skills_objs.keys()) # tests that all method returns same count of Skills objects self.assertEqual(total_skills_count, skills_count1) # tests that all method returns dictionary self.assertIsInstance(all_skills_objs, dict) # creates new Skills obj to test with new_obj = Skills() # adds all attributes required for testing # (id should be set by primary key) # (created_at, updated_at should be set by datetime) new_obj.name = "test_name" # saves new object to the database new_obj.save() # re-call storage.all() method and test that count increased by 1 all_skills_objs = storage.all(Skills) skills_count2 = len(all_skills_objs.keys()) self.assertEqual(skills_count1 + 1, skills_count2) # tests that newly created obj is in dictionary with correct key self.assertIsInstance(storage.all(), dict) dict_key = "{}.{}".format("Skills", new_obj.id) self.assertIn(dict_key, storage.all()) # get obj attributes from stroage.all() dictionary using obj id # test that retrieved attributes match expected values obj_class = storage.all().get("Skills.{}".format( new_obj.id)).__class__.__name__ self.assertEqual("Skills", obj_class) obj_name = storage.all().get("Skills.{}".format(new_obj.id)).name self.assertEqual("test_name", obj_name) # delete new object from the database new_obj.delete() # re-call storage.all() method and test that count decreased by 1 all_skills_objs = storage.all(Skills) skills_count3 = len(all_skills_objs.keys()) self.assertEqual(skills_count2 - 1, skills_count3) self.assertEqual(skills_count1, skills_count3) # tests that new object is no longer in return dictionary self.assertNotIn(dict_key, storage.all())
def test_delete_method(self, mock_storage): """ tests that the delete() method inherited from BaseModel calls on storage.delete() to remove and commit the object from the database """ # creates new instance of Skills new_obj = Skills() # adds name as required attribute for database # (id should be set by primary key) # (created_at, updated_at should be set by datetime) new_obj.name = "test_name" # saves to database before attempting to delete new_obj.save() self.assertTrue(mock_storage.new.called) # deletes new instance and tests if storage method deleted is called new_obj.delete() self.assertTrue(mock_storage.delete.called)