def test_list_images(self): """Test that list_images returns the right list of images""" # get the four most recent image entries image_list = interface.list_images(self.db, 4) self.assertEqual(4, len(image_list)) # and all entries are four elements long self.assertTrue(all([len(i) == 4 for i in image_list])) # check that the images are in the right order self.assertListEqual([img[0] for img in self.images], [img['filename'] for img in image_list]) # and the dates are right self.assertListEqual([img[1] for img in self.images], [img['timestamp'] for img in image_list]) # and the owners self.assertListEqual([img[2] for img in self.images], [img['user'] for img in image_list]) # now check the likes for image in image_list: likes = [ img[3] for img in self.images if img[0] == image['filename'] ] self.assertEqual(len(likes[0]) + 1, image['likes'])
def test_list_images_user(self): """Test that list_images with the extra usernick argument returns the right list of images for a user""" for password, nick, avatar in self.users: # get the three most recent image entries image_list = interface.list_images(self.db, 3, nick) # image_list should be a list of dictionaries for img in image_list: self.assertEqual(dict, type(img), "returned element not a dictionary") # check that the images are in the right order dates = [img['timestamp'] for img in image_list] sorteddates = [img['timestamp'] for img in image_list] sorteddates.sort(reverse=True) self.assertListEqual(dates, sorteddates) # and the owners, dates and like count are correct for img in image_list: for refimage in self.db.images: if img['filename'] == refimage[0]: self.assertEqual(refimage[1], img['timestamp']) self.assertEqual(refimage[2], img['user']) self.assertEqual(len(refimage[3]) + 1, img['likes'])
def test_add_image(self): """Test that add_image updates the database properly""" imagename = 'new.jpg' usernick = 'carol' interface.add_image(self.db, imagename, usernick) images = interface.list_images(self.db, 5) print images self.assertEqual(imagename, images[0]['filename'], 'wrong image name after add_image') self.assertEqual(usernick, images[0]['user'], 'wrong user in first image') # date should be today's date in UTC to match SQLite today = datetime.datetime.utcnow().strftime("%Y-%m-%d") date = images[0]['timestamp'] self.assertEqual(date[:10], today)
def index(): """Main page; Displays the 3 latest images. Navbar is displayed from all pages. Login form is also displayed for user.""" db = COMP249Db() curr_session = None curr_user = None img_list = interface.list_images(db, 3) if request.get_cookie(COOKIE_NAME): curr_session = request.get_cookie(COOKIE_NAME) curr_user = users.session_user(db) return template('index.html', title="FlowTow", images=img_list, session=curr_session, name=curr_user, interface=interface, db=db)
def index(): """ 首页 :return: 页面渲染元素字典 """ imagesNumber = 3 flowTowDataBase = COMP249Db() userNick = users.session_user(db=flowTowDataBase) imagesList = interface.list_images(db=flowTowDataBase, n=imagesNumber) renderDict = { "title": "FlowTow!", "homeActive": True, "aboutActive": False, "imagesList": imagesList, "imagesNumber": imagesNumber, "userNick": userNick, "myActive": False } return template('index', renderDict)
def my(): """My Images page; Displays images uploaded by the user. If there is no user logged in, they are redirected to the Main page.""" db = COMP249Db() curr_session = None curr_user = None if request.get_cookie(COOKIE_NAME): curr_session = request.get_cookie(COOKIE_NAME) curr_user = users.session_user(db) else: redirect('/') img_list = interface.list_images(db, 3, curr_user) return template('index.html', title="FlowTow", images=img_list, session=curr_session, name=curr_user, interface=interface, db=db)
def my(): """ My Images页面 :return:模板渲染网页标题等 """ flowTowDataBase = COMP249Db() userNick = users.session_user(db=flowTowDataBase) if userNick: # 此处的n不起作用,因为指定了用户名 imagesList = interface.list_images(db=flowTowDataBase, n=0, usernick=userNick) renderDict = { "title": "FlowTow!", "homeActive": False, "aboutActive": False, "imagesList": imagesList, "imagesNumber": len(imagesList), "userNick": userNick, "myActive": True } return template('index', renderDict) else: return redirect('/')