def test_study_group_list(self): user = User(username='******', email='*****@*****.**', password='******', first_name="Unit", last_name="Test") user.save() profile = Profile(user=user, reports=0, user_type=0) profile.save() c = Client() course = Courses(course_number=309, course_department="COM S", course_name="Software Project") course.save() response = c.post('/api/studygroup/create/', json.dumps({"course_id": 1}), content_type="application/json") self.assertEqual(response.status_code, 200) self.assertEqual( StudyGroup.objects.get(course=1).course.course_name, 'Software Project') self.assertEqual(response.content, b'Software Project') response = c.post('/api/studygroup/join/', json.dumps({ "id": 1, "studygroup_id": 1 }), content_type="application/json") studentgroup = StudentsStudyGroups.objects.get( user=user, group=StudyGroup.objects.get(id=1)) self.assertEqual(1, studentgroup.user.id) self.assertEqual(1, studentgroup.group.id) response = c.get('/api/studygroup/list/') self.assertJSONEqual(response.content, [{ "id": 1, "course_department": "COM S", "course_number": 309, "course_name": "Software Project", "members": [{ "id": 1, "username": "******", "email": "*****@*****.**", "first_name": "Unit", "last_name": "Test" }] }])
def get(self, profile_id=None): """HTML GET handler. Check the query parameters for the ID of the profile to be displayed. If found, display the user. Otherwise display current user""" template_values = self.build_template_values() if profile_id and template_values[handlers.base.PROFILE_KEY] and int(profile_id) == template_values[handlers.base.PROFILE_KEY].key().id(): template_values['viewed_profile'] = template_values[handlers.base.PROFILE_KEY] elif profile_id: template_values['viewed_profile'] = Profile.get_by_id(int(profile_id)) elif template_values[handlers.base.PROFILE_KEY]: return self.redirect(self.uri_for("profile", profile_id=template_values[handlers.base.PROFILE_KEY].key().id())) else: return self.forbidden() favorites = Vote.all().filter("voter = ", template_values['viewed_profile']).filter("is_up = ", True).fetch(1) if favorites: template_values['recent_up_monster'] = favorites[0].monster created = Monster.get_recent(1, creator=template_values['viewed_profile'], user=template_values[handlers.base.PROFILE_KEY]) if created: template_values['recent_monster'] = created[0] template = configuration.site.jinja_environment.get_template('profile/view.html') return self.response.write(template.render(template_values))
def get(self): """HTML GET handler. If user if not logged in, send them to login. If user is logged in but has no profile, set one up. Otherwise, redirect to profile page.""" template_values = self.build_template_values() if not template_values[handlers.base.PROFILE_KEY]: profile = Profile() profile.display_name = "A Person With No Name" profile.account = template_values[handlers.base.USER_KEY] profile.put() template_values[handlers.base.PROFILE_KEY] = profile template_values['new'] = True template = configuration.site.jinja_environment.get_template('profile/edit.html') self.response.write(template.render(template_values))
def test_join_study_group(self): user = User(username='******', email='*****@*****.**', password='******', first_name="Unit", last_name="Test") user.save() profile = Profile(user=user, reports=0, user_type=0) profile.save() c = Client() course = Courses(course_number=309, course_department="COM S", course_name="Software Project") course.save() response = c.post('/api/studygroup/create/', json.dumps({"course_id": 1}), content_type="application/json") self.assertEqual(response.status_code, 200) self.assertEqual( StudyGroup.objects.get(course=1).course.course_name, 'Software Project') self.assertEqual(response.content, b'Software Project') response = c.post('/api/studygroup/join/', json.dumps({ "id": 1, "studygroup_id": 1 }), content_type="application/json") studentgroup = StudentsStudyGroups.objects.get( user=user, group=StudyGroup.objects.get(id=1)) self.assertEqual(1, studentgroup.user.id) self.assertEqual(1, studentgroup.group.id) response = c.post('/api/studygroup/join/', json.dumps({ "id": 1, "studygroup_id": 1 }), content_type="application/json") self.assertEqual(response.content, b'You are already a member of this group.')
def get(self): """HTML GET handler. Check login status and redirect appropriately.""" user = users.get_current_user() if user: profile = Profile.for_user(user) if profile: self.redirect(self.uri_for('home')) else: self.redirect(self.uri_for('profile.edit')) else: self.redirect(users.create_login_url(self.uri_for('login')))
def create_user(request): """ Creates a new user. The username, first_name, last_name, email, password, and user_type of the user are passed in from the client as json. :param request: The request made from the client. :return: An HttpResponse with the username of the user created (used for testing). """ create_username = json.loads(request.body.decode("utf-8"))['username'] create_first_name = json.loads(request.body.decode("utf-8"))['first_name'] create_last_name = json.loads(request.body.decode("utf-8"))['last_name'] create_email = json.loads(request.body.decode("utf-8"))['email'] create_password = json.loads(request.body.decode("utf-8"))['password'] new_user = User(username=create_username, first_name=create_first_name, last_name=create_last_name, email=create_email, password=create_password) new_user.set_password(new_user.password) # user_type = json.loads(request.body.decode("utf-8"))['user_type'] new_user.save() new_profile = Profile(user=new_user, reports=0, user_type=0) new_profile.save() return HttpResponse(new_user.username)
def get(self, entity_id=None): """HTML GET handler. Check if the user has already voted. If they haven't, -1 the monster. Otherwise, error.""" user = users.get_current_user() profile = Profile.all().filter("account = ", user).get() monster = Monster.get_by_id_safe(int(entity_id), profile) if (not monster) or (not profile): return self.forbidden() previous_vote = Vote.all().filter("voter = ", profile).filter("monster = ",monster).get() if previous_vote and previous_vote.is_up: previous_vote.is_up = False previous_vote.put() if monster.downs: monster.downs += 1 else: monster.downs = 1 if monster.ups: monster.ups -= 1 else: monster.ups = 0 monster.compute_score() monster.put() elif previous_vote: return self.response_set_status(500) else: vote = Vote() vote.voter = profile vote.monster = monster vote.is_up = False vote.put() if monster.downs: monster.downs += 1 else: monster.downs = 1 monster.compute_score() monster.put()
def post(self): """HTML POST handler. Setup profile.""" user = users.get_current_user() if user: profile = Profile.for_user(user) if not profile: profile = Profile() profile.display_name = self.request.get('display_name') profile.account = user profile.put() return self.redirect(self.uri_for('profile.me')) else: return self.redirect(users.create_login_url(self.request.uri))
def get(self, access_code=None): """HTML GET handler. Check the query parameters for the access code and grant access to that product.""" user = users.get_current_user() profile = Profile.for_user(user) if not profile: return self.forbidden() if not access_code: return self.forbidden() product = Product.get_by_access_code(access_code) if not product: return self.not_found() profile.products.append(product.key().id()) profile.put() return self.redirect(self.uri_for('profile.edit'))
def get(self, profile_id=None): """HTML GET handler. Renders a response to a GET. Queries monsters to feature and renders them to the index.html template. Does not accept any query parameters""" template_values = self.build_template_values() skip = int(self.request.get("skip", default_value=0)) favoriter = Profile.get_by_id(int(profile_id)) template_values['favoriter'] = favoriter template_values['monsters'] = favoriter.get_favorites( 10, user=template_values[handlers.base.PROFILE_KEY], skip=skip) if len(template_values['monsters']) >= 10: template_values['next'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip+10) if skip >= 10: template_values['prev'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip-10) template = configuration.site.jinja_environment.get_template('monster/all.html') self.response.write(template.render(template_values))
def build_template_values(self): template_values = {} template_values[USER_KEY] = users.get_current_user() if not template_values[USER_KEY]: template_values[LOGIN_URL_KEY] = users.create_login_url(self.uri_for('login')) template_values[PROFILE_KEY] = None else: template_values[PROFILE_KEY] = Profile.for_user(template_values[USER_KEY]) common_urls = {} common_urls['home_url'] = self.uri_for('home') common_urls['create_url'] = self.uri_for('monster.create') common_urls['profile_url'] = self.uri_for('profile.me') common_urls['login_url'] = self.uri_for('login') common_urls['logout_url'] = self.uri_for('logout') common_urls['search_url'] = self.uri_for('search') common_urls['product_create_url'] = self.uri_for('product.create') common_urls['browse_url'] = self.uri_for('monster.all') template_values['common_urls'] = common_urls format_urls = {} format_urls['monster_url'] = self.uri_for('monster', entity_id=r'%d') format_urls['monster.edit_url'] = self.uri_for('monster.edit', entity_id=r'%d') format_urls['monster.delete_url'] = self.uri_for('monster.delete', entity_id=r'%d') format_urls['monster.up_url'] = self.uri_for('monster.upvote', entity_id=r'%d') format_urls['monster.down_url'] = self.uri_for('monster.downvote', entity_id=r'%d') format_urls['profile'] = self.uri_for('profile', profile_id=r'%d') format_urls['product'] = self.uri_for('product', entity_id=r'%d') format_urls['product.update'] = self.uri_for('product.update', entity_id=r'%d') format_urls['profile.add'] = self.uri_for('profile.add', access_code=r'%s') template_values['format_urls'] = format_urls template_values['licenses'] = configuration.site.licenses self.template_values = template_values return template_values
def get(self, profile_id=None): """HTML GET handler. Renders a response to a GET. Queries monsters to feature and renders them. Easy enough, right?""" template_values = self.build_template_values() skip = int(self.request.get("skip", default_value=0)) creator = Profile.get_by_id(int(profile_id)) template_values['creator'] = creator template_values['monsters'] = Monster.get_recent( 10, creator=creator, user=template_values[handlers.base.PROFILE_KEY], skip=skip) if len(template_values['monsters']) >= 10: template_values['next'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip+10) if skip >= 10: template_values['prev'] = str(self.uri_for('profile.monster.all', profile_id=profile_id))+"?skip="+str(skip-10) template = configuration.site.jinja_environment.get_template('monster/all.html') self.response.write(template.render(template_values))