コード例 #1
0
class TestGroupService(unittest.TestCase):
    """Test service of group"""
    def setUp(self):
        from sosbeacon.school import School
        from sosbeacon.group import Group
        from sosbeacon.group import ADMIN_GROUPS_ID
        from sosbeacon.group import STAFF_GROUPS_ID

        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.setup_env(app_id='testapp')
        self.testbed.init_datastore_v3_stub()

        url_map = [
            webapp2.Route(r'/service/group/<resource_id:.+>',
                          handler='sosbeacon.service.GroupHandler'),
            webapp2.Route(r'/service/group<:/?>',
                          handler='sosbeacon.service.GroupListHandler'),

            webapp2.Route(r'/service/admin/user<:/?>',
                          handler='sosbeacon.service.UserListHandler'),

            ('/authentication/login', LoginUserHandler)
        ]

        app = webapp2.WSGIApplication(
            url_map,
            config=webapp_config
        )
        self.testapp = webtest.TestApp(app)

        self.school1 = School(
            id='100',
            name='School_Test',
        )

        self.school2 = School(
            id='200',
            name='School_Test_2',
        )

        self.school1.put()

        params = {
            'name': 'longly',
            'email': '*****@*****.**',
            'phone': '84973796065',
            'password': '******',
            'schools': [self.school1.key.urlsafe()]
        }
        self.testapp.post_json('/service/admin/user/', params)

        email = '*****@*****.**'
        password = '******'

        params1 = {'email': email, 'password': password}
        self.testapp.post('/authentication/login', params1)

        self.group1 = Group(
            id='1',
            name='Group 1',
            school=self.school1.key
        )

        self.group2 = Group(
            id='2',
            name='Group 2',
            school=self.school1.key
        )

        self.group3 = Group(
            id='3',
            name='Group 3',
            school=self.school1.key
        )

        self.group4 = Group(
            id='4',
            name='Group 4',
            school=self.school2.key
        )

        self.group_admin = Group(
            id=ADMIN_GROUPS_ID + "%s" % (self.school1.key.id()),
            name='Group Admin',
            school=self.school1.key,
            default = True
        )

        self.group_staff = Group(
            id=STAFF_GROUPS_ID + "%s" % (self.school1.key.id()),
            name='Group Staff',
            school=self.school1.key,
            default = True
        )

    def test_service_url(self):
        """Ensure link to service group exists"""
        response = self.testapp.get('/service/group')
        self.assertEqual(response.status_int, 200)

    def test_service_create_group(self):
        """Ensure create success new event with json object send from client"""
        params = {
            'name': 'Group Test',
            }

        response = self.testapp.post_json('/service/group', params)
        obj = json.loads(response.normal_body)

        self.assertEqual(response.status_int, 200)
        self.assertEqual(obj['name'], params['name'])

    def test_service_create_exists_name_group(self):
        """Ensure can not create duplicate name group"""
        self.group1.put()
        params = {
            'name' : 'Group 1',
        }
        response = self.testapp.post_json('/service/group', params, status=400)

        self.assertEqual(response.status_int, 400)

    def test_service_get_filter_group(self):
        """Ensure server response group which same school"""
        to_put = [self.group1, self.group2, self.group3, self.group4, self.group_admin, self.group_staff]
        ndb.put_multi(to_put)

        response = self.testapp.get('/service/group')
        obj = json.loads(response.normal_body)

        self.assertEqual(len(obj), 5)

    def test_service_edit_group(self):
        """Ensure group will be update new data"""
        self.group1.put()
        params = {
            'name':'Update Group'
        }

        response = self.testapp.put_json('/service/group/%s' % self.group1.key.urlsafe(), params)
        obj = json.loads(response.normal_body)

        self.assertEqual(response.status_int, 200)
        self.assertEqual(obj['name'], params['name'])

#    def test_service_edit_duplicate_group(self):
#        """Ensure user can not edit duplication group name"""
#        self.group1.put()
#        params = {
#            'name':'Group 1'
#        }
#        response = self.testapp.put_json('/service/group/%s' % self.group1.key.urlsafe(), params)
#        logging.info(response)
#        self.assertEqual(response.status_int, 400)

    def test_service_edit_default_group(self):
        """Ensure can not update information of default group"""
        self.group_admin.put()
        params = {
            'name':'Update Group Admin'
        }
        response = self.testapp.put_json('/service/group/%s' % self.group_admin.key.urlsafe(), params, status=400)
        self.assertEqual(response.status_int, 400)

    def test_service_delete_group(self):
        """Ensure this group will be None object"""
        from google.appengine.ext import ndb
        self.group1.put()
        response = self.testapp.delete('/service/group/%s' %self.group1.key.urlsafe())
        query_group = ndb.Key(urlsafe=self.group1.key.urlsafe())
        self.assertIsNone(query_group.get())
        self.assertEqual(response.status_int, 200)

    def test_service_delete_default_group(self):
        """Ensure can not delete default group"""
        self.group_admin.put()
        response = self.testapp.delete('/service/group/%s' % self.group_admin.key.urlsafe(), status=400)
        self.assertEqual(response.status_int, 400)

    def test_number_student_of_group(self):
        """Ensure number student of group always > 1"""
        to_put = [self.group1, self.group2, self.group3, self.group4, self.group_admin, self.group_staff]
        ndb.put_multi(to_put)

        response = self.testapp.get('/service/group')
        obj = json.loads(response.normal_body)

        for i in obj:
            self.assertGreaterEqual(1, i['number_student'])

    def test_sort_admin_staff_group(self):
        """Ensure admin and staff always at position 1 and 2"""
        to_put = [self.group1, self.group2, self.group3, self.group4, self.group_admin, self.group_staff]
        ndb.put_multi(to_put)

        response = self.testapp.get('/service/group')
        obj = json.loads(response.normal_body)

        self.assertEqual(obj[0]['name'], self.group_admin.name)
        self.assertEqual(obj[1]['name'], self.group_staff.name)