示例#1
0
def override(start_time, end_time, ev_ids, user):
    re = requests.post(api_v0('events/override'),
                       json={'start': start_time,
                             'end': end_time,
                             'event_ids': ev_ids,
                             'user': user})
    assert re.status_code == 200
    return re
示例#2
0
def test_api_v0_get_teams(team):
    team_name = team.create()
    re = requests.get(api_v0('teams'))
    assert re.status_code == 200
    teams = re.json()
    assert isinstance(teams, list)
    assert len(teams) >= 1
    assert team_name in teams
示例#3
0
 def create(self, team_name, roster_name, json):
     re = requests.post(api_v0('teams/%s/rosters/%s/schedules' %
                               (team_name, roster_name)),
                        json=json)
     assert re.status_code == 201
     schedule_id = re.json()['id']
     self.created.append(schedule_id)
     return schedule_id
示例#4
0
def test_v0_populate_vacation_propagate(user, team, roster, role, schedule, event):
    user_name = user.create()
    user_name_2 = user.create()
    team_name = team.create()
    team_name_2 = team.create()
    role_name = role.create()
    roster_name = roster.create(team_name)
    schedule_id = schedule.create(team_name,
                                  roster_name,
                                  {'role': role_name,
                                   'events': [{'start': 0, 'duration': 604800}],
                                   'advanced_mode': 0,
                                   'auto_populate_threshold': 14})
    user.add_to_roster(user_name, team_name, roster_name)
    user.add_to_roster(user_name_2, team_name, roster_name)
    user.add_to_team(user_name, team_name_2)

    # Populate for team 1
    re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json = {'start': time.time()})
    assert re.status_code == 200

    # Create conflicting vacation event in team 2 for user 1
    re = requests.get(api_v0('events?team=%s' % team_name))
    assert re.status_code == 200
    events = re.json()
    assert len(events) == 2
    assert events[0]['user'] != events[1]['user']
    for e in events:
        event.create({
            'start': e['start'],
            'end': e['end'],
            'user': user_name,
            'team': team_name_2,
            'role': "vacation",
        })

    # Populate again for team 1
    re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json = {'start': time.time()})
    assert re.status_code == 200

    # Ensure events are both for user 2 (since user 1 is busy in team 2)
    re = requests.get(api_v0('events?team=%s&include_subscribed=false' % team_name))
    assert re.status_code == 200
    events = re.json()
    assert len(events) == 2
    assert events[0]['user'] == events[1]['user'] == user_name_2
示例#5
0
 def cleanup(self):
     for team in self.created:
         requests.delete(api_v0('teams/' + team))
     if self.created:
         self.cursor.execute('DELETE FROM team WHERE name IN %s', (self.created,))
         self.connection.commit()
     self.cursor.close()
     self.connection.close()
示例#6
0
def test_api_v0_round_robin(user, team, roster, role, schedule, event):
    user_name = user.create()
    user_name_2 = user.create()
    user_name_3 = user.create()
    team_name = team.create()
    role_name = role.create()
    roster_name = roster.create(team_name)
    user.add_to_roster(user_name, team_name, roster_name)
    user.add_to_roster(user_name_2, team_name, roster_name)
    user.add_to_roster(user_name_3, team_name, roster_name)
    schedule_id = schedule.create(team_name,
                                  roster_name,
                                  {'role': role_name,
                                   'events': [{'start': 0, 'duration': 604800}],
                                   'advanced_mode': 0,
                                   'auto_populate_threshold': 28,
                                   'scheduler': {'name': 'round-robin',
                                                 'data': [user_name, user_name_2, user_name_3]}})

    def clean_up():
        re = requests.get(api_v0('events?team='+team_name))
        for ev in re.json():
            requests.delete(api_v0('events/%d' % ev['id']))

    clean_up()

    start = time.time()
    # Create an event for user 1
    event.create({'start': start,
                  'end': start + 1000,
                  'user': user_name,
                  'team': team_name,
                  'role': role_name})

    re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json = {'start': start + 2000})
    assert re.status_code == 200

    re = requests.get(api_v0('events?team=%s' % team_name))
    assert re.status_code == 200
    events = re.json()
    # Check that newly populated events start with user 2, then loop back to user 1
    assert events[1]['user'] == user_name_2
    assert events[2]['user'] == user_name_3
    assert events[3]['user'] == user_name

    clean_up()
def test_api_v0_fill_gap_skip_busy(user, team, role, roster, event):
    user_name = user.create()
    user_name_2 = user.create()
    user_name_3 = user.create()
    user_name_4 = user.create()
    team_name = team.create()
    role_name = role.create()
    role_name_2 = role.create()
    roster_name = roster.create(team_name)
    start = int(time.time()) + 1000
    user.add_to_roster(user_name, team_name, roster_name)
    user.add_to_roster(user_name_2, team_name, roster_name)
    user.add_to_roster(user_name_3, team_name, roster_name)
    user.add_to_roster(user_name_4, team_name, roster_name)

    # Create events: user_name will be the expected user, with events far from
    # the suggestion time (start + 2000). user_name_4 will be a busy user, who
    # would otherwise be chosen.
    event.create({
        'start': start,
        'end': start + 1000,
        'user': user_name,
        'team': team_name,
        'role': role_name
    })
    event.create({
        'start': start + 1000,
        'end': start + 2000,
        'user': user_name_2,
        'team': team_name,
        'role': role_name
    })
    event.create({
        'start': start + 3000,
        'end': start + 4000,
        'user': user_name_3,
        'team': team_name,
        'role': role_name
    })
    event.create({
        'start': start + 4000,
        'end': start + 5000,
        'user': user_name,
        'team': team_name,
        'role': role_name
    })
    event.create({
        'start': start + 1000,
        'end': start + 3000,
        'user': user_name_4,
        'team': team_name,
        'role': role_name_2
    })
    re = requests.get(
        api_v0('teams/%s/rosters/%s/%s/suggest?start=%s' %
               (team_name, roster_name, role_name, start + 2000)))
    assert re.status_code == 200
    assert re.json()['user'] == user_name
示例#8
0
def test_api_v0_users():
    user_name = 'test_v0_users_user'

    def clean_up():
        requests.delete(api_v0('users/' + user_name))

    clean_up()

    # test adding user
    re = requests.post(api_v0('users'), json={'name': user_name})
    assert re.status_code == 201

    re = requests.get(api_v0('users/' + user_name))
    assert re.status_code == 200
    response = json.loads(re.text)
    assert 'contacts' in response
    assert response['full_name'] != 'Juan Doş'

    # test updating user
    re = requests.put(api_v0('users/' + user_name),
                      json={
                          'full_name': 'Juan Doş',
                          'time_zone': 'PDT'
                      })
    assert re.status_code == 204

    # test updating user contacts
    re = requests.put(api_v0('users/' + user_name),
                      json={
                          'full_name': 'Juan Doş',
                          'contacts': {
                              'call': '+1 333-333-3339'
                          }
                      })
    assert re.status_code == 204

    # make sure update has gone through, test get
    re = requests.get(api_v0('users/' + user_name))
    assert re.status_code == 200
    response = re.json()
    assert response['full_name'] == 'Juan Doş'

    user_id = response['id']
    re = requests.get(api_v0('users?id=%s' % user_id))
    assert re.status_code == 200
    response = re.json()
    assert response[0]['full_name'] == 'Juan Doş'

    re = requests.get(api_v0('users'),
                      params={
                          'name': user_name,
                          'fields': ['full_name', 'time_zone', 'contacts']
                      })
    assert re.status_code == 200
    response = json.loads(re.text)
    assert response[0]['full_name'] == 'Juan Doş'
    assert response[0]['time_zone'] == 'PDT'
    assert response[0]['contacts']['call'] == '+1 333-333-3339'

    clean_up()
示例#9
0
 def create(self, team_name):
     roster_name = '_'.join(
         [self.prefix, 'roster',
          str(len(self.created))])
     re = requests.post(api_v0('teams/%s/rosters' % team_name),
                        json={'name': roster_name})
     assert re.status_code in [201, 422]
     self.created.append((roster_name, team_name))
     return roster_name
示例#10
0
def test_api_v0_override_multiple(team, user, role, event):
    team_name = team.create()
    role_name = role.create()
    user_name = user.create()
    override_user = user.create()
    user.add_to_team(user_name, team_name)
    user.add_to_team(override_user, team_name)

    ev1 = event.create({'start': start-1000,
                        'end': start+1000,
                        'user': user_name,
                        'team': team_name,
                        'role': role_name})
    ev2 = event.create({'start': start+1000,
                        'end': start+2000,
                        'user': user_name,
                        'team': team_name,
                        'role': role_name})
    ev3 = event.create({'start': start+2000,
                        'end': end-1000,
                        'user': user_name,
                        'team': team_name,
                        'role': role_name})
    ev4 = event.create({'start': end-1000,
                        'end': end+1000,
                        'user': user_name,
                        'team': team_name,
                        'role': role_name})

    re = override(start, end, [ev1, ev2, ev3, ev4], override_user)
    assert len(re.json()) == 3

    re = requests.get(api_v0('events?user='******'start'])
    assert len(events) == 2
    assert events[0]['start'] == start - 1000
    assert events[0]['end'] == start
    assert events[1]['start'] == end
    assert events[1]['end'] == end + 1000

    re = requests.get(api_v0('events?user='******'start'] == start
    assert events[0]['end'] == end
示例#11
0
def test_api_v0_populate_skip(user, team, roster, role, schedule, event):
    user_name = user.create()
    user_name_2 = user.create()
    team_name = team.create()
    role_name = role.create()
    roster_name = roster.create(team_name)
    schedule_id = schedule.create(team_name,
                                  roster_name,
                                  {'role': role_name,
                                   'events': [{'start': 0, 'duration': 604800}],
                                   'advanced_mode': 0,
                                   'auto_populate_threshold': 14})
    user.add_to_roster(user_name, team_name, roster_name)
    user.add_to_roster(user_name_2, team_name, roster_name)


    re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json = {'start': time.time()})
    assert re.status_code == 200

    re = requests.get(api_v0('events?team=%s' % team_name))
    assert re.status_code == 200
    events = re.json()
    assert len(events) == 2

    event.create({
        'start': events[0]['start'],
        'end': events[0]['end'],
        'user': user_name,
        'team': team_name,
        'role': role_name,
    })

    re = requests.post(api_v0('schedules/%s/populate' % schedule_id), json = {'start': time.time()})
    assert re.status_code == 200

    re = requests.get(api_v0('events?team=%s' % team_name))
    assert re.status_code == 200
    events = re.json()
    assert len(events) == 2

    schedule_ids = set([ev['schedule_id'] for ev in events])
    assert None in schedule_ids
    assert schedule_id in schedule_ids
示例#12
0
def test_api_v0_auto_add_rosters_users_to_team(team, user, roster):
    '''
    User should be automatically added to team when added to a roster
    '''
    team_name = team.create()
    roster_name = roster.create(team_name)
    user_name = user.create()

    # make sure user is not in the team
    team = requests.get(api_v0('teams/' + team_name)).json()
    assert user_name not in team['users']

    # add user to roster
    requests.post(api_v0('teams/%s/rosters/%s/users' % (team_name, roster_name)),
                  json={'name': user_name})

    # check to make sure user is also added to the team
    team = requests.get(api_v0('teams/' + team_name)).json()
    assert user_name in team['users']
示例#13
0
def test_api_v0_schedules_with_spaces_in_roster_name(team):
    team_name = 'test_v0 spaces team foo'
    roster_name = 'test_v0 spaces roster foo'

    re = requests.post(api_v0('teams'),
                       json={
                           'name': team_name,
                           'scheduling_timezone': 'UTC'
                       })
    assert re.status_code == 201
    team.mark_for_cleaning(team_name)
    re = requests.post(api_v0('teams/%s/rosters' % team_name),
                       json={'name': roster_name})
    assert re.status_code == 201

    re = requests.get(
        api_v0('teams/%s/rosters/%s/schedules' %
               (team_name, urllib.quote(roster_name, safe=''))))
    assert re.status_code == 200
示例#14
0
 def create(self):
     name = '_'.join([self.prefix, 'team', str(len(self.created))])
     re = requests.post(api_v0('teams'),
                        json={
                            'name': name,
                            'scheduling_timezone': 'utc'
                        })
     assert re.status_code in [201, 422]
     self.created.add(name)
     return name
示例#15
0
def test_api_v0_team_summary(team, user, role, event):
    team_name = team.create()
    user_name = user.create()
    user_name_2 = user.create()
    role_name = role.create()
    role_name_2 = role.create()
    user.add_to_team(user_name, team_name)
    user.add_to_team(user_name_2, team_name)

    start, end = int(time.time()), int(time.time()+36000)

    event_data_1 = {'start': start,
                    'end': end,
                    'user': user_name,
                    'team': team_name,
                    'role': role_name}
    event_data_2 = {'start': start - 5,
                    'end': end - 5,
                    'user': user_name_2,
                    'team': team_name,
                    'role': role_name_2}
    event_data_3 = {'start': start + 50000,
                    'end': end + 50000,
                    'user': user_name,
                    'team': team_name,
                    'role': role_name}
    event_data_4 = {'start': start + 50005,
                    'end': end + 50005,
                    'user': user_name_2,
                    'team': team_name,
                    'role': role_name_2}
    event_data_5 = {'start': start + 50001,
                    'end': end + 50001,
                    'user': user_name,
                    'team': team_name,
                    'role': role_name}

    # Create current events
    event.create(event_data_1)
    event.create(event_data_2)
    # Create next events
    event.create(event_data_3)
    event.create(event_data_4)
    # Create extra future event that isn't the next event
    event.create(event_data_5)

    re = requests.get(api_v0('teams/%s/summary' % team_name))
    assert re.status_code == 200
    results = re.json()
    keys = ['start', 'end', 'role', 'user']

    assert all(results['current'][role_name][0][key] == event_data_1[key] for key in keys)
    assert all(results['current'][role_name_2][0][key] == event_data_2[key] for key in keys)
    assert all(results['next'][role_name][0][key] == event_data_3[key] for key in keys)
    assert all(results['next'][role_name_2][0][key] == event_data_4[key] for key in keys)
示例#16
0
def test_notify_on_swap(user, role, team, event):
    user_name = user.create()
    user_name_2 = user.create()
    team_name = team.create()
    role_name = role.create()
    user.add_to_team(user_name, team_name)
    user.add_to_team(user_name_2, team_name)

    start, end = int(time.time() + 100), int(time.time() + 36000)

    ev_id = event.create({
        'start': start,
        'end': end,
        'user': user_name,
        'team': team_name,
        'role': role_name,
    })

    ev_id_2 = event.create({
        'start': start + 100,
        'end': end + 100,
        'user': user_name_2,
        'team': team_name,
        'role': role_name,
    })

    # set up notification settings
    notification = {'team': team_name, 'roles': [role_name], 'mode': 'email', 'type': EVENT_SWAPPED,
                    'only_if_involved': True}
    re = requests.post(api_v0('users/%s/notifications' % user_name), json=notification)
    assert re.status_code == 201
    re = requests.post(api_v0('users/%s/notifications' % user_name_2), json=notification)
    assert re.status_code == 201

    # Swap these events
    re = requests.post(api_v0('events/swap'), json={'events': [{'id': ev_id, 'linked': False},
                                                               {'id': ev_id_2, 'linked': False}]})
    assert re.status_code == 200

    notifications = get_notifications([user_name, user_name_2], EVENT_SWAPPED)
    assert len(notifications) == 2
    assert {n['user'] for n in notifications} == {user_name, user_name_2}
示例#17
0
def test_api_v0_services_current_oncall(team, service, user, role, event):
    team_name = team.create()
    service_name = service.create()
    service.associate_team(service_name, team_name)
    user_name = user.create()
    user_name_2 = user.create()
    role_name = role.create()
    role_name_2 = role.create()
    user.add_to_team(user_name, team_name)
    user.add_to_team(user_name_2, team_name)

    start, end = int(time.time()), int(time.time() + 36000)
    event_data_1 = {
        'start': start,
        'end': end,
        'user': user_name,
        'team': team_name,
        'role': role_name
    }
    event_data_2 = {
        'start': start - 5,
        'end': end - 5,
        'user': user_name_2,
        'team': team_name,
        'role': role_name_2
    }
    # Create current event
    event.create(event_data_1)
    # Create extra event with different role
    event.create(event_data_2)

    re = requests.get(
        api_v0('services/%s/oncall/%s' % (service_name, role_name)))
    assert re.status_code == 200
    results = re.json()
    assert results[0]['start'] == start
    assert results[0]['end'] == end

    re = requests.get(api_v0('services/%s/oncall' % service_name))
    assert re.status_code == 200
    results = re.json()
    assert len(results) == 2
示例#18
0
def test_api_v0_user_teams(team, user):
    team_name = team.create()
    user_name = user.create()

    # should get an empty team list
    re = requests.get(api_v0('users/%s/teams' % user_name))
    assert re.status_code == 200
    assert re.json() == []

    # should not get an empty team list
    re = requests.post(api_v0('teams/%s/users' % team_name),
                       json={'name': user_name})
    assert re.status_code == 201
    re = requests.get(api_v0('users/%s/teams' % user_name))
    assert re.status_code == 200
    assert team_name in re.json()

    # should get 404 on invalid user
    re = requests.get(api_v0('users/invalid_user_foobar-123/teams'))
    assert re.status_code == 404
示例#19
0
def test_v0_subscription_oncall(user, role, team, service, event):
    team_name = team.create()
    team_name_2 = team.create()
    service_name = service.create()
    service.associate_team(service_name, team_name)
    user_name = user.create()
    user_name_2 = user.create()
    role_name = role.create()
    user.add_to_team(user_name, team_name)
    user.add_to_team(user_name_2, team_name_2)
    re = requests.post(api_v0('teams/%s/subscriptions' % team_name),
                       json={
                           'role': role_name,
                           'subscription': team_name_2
                       })
    assert re.status_code == 201
    start = int(time.time())

    ev1 = event.create({
        'start': start,
        'end': start + 1000,
        'user': user_name,
        'team': team_name,
        'role': role_name
    })
    ev2 = event.create({
        'start': start,
        'end': start + 1000,
        'user': user_name_2,
        'team': team_name_2,
        'role': role_name
    })

    re = requests.get(
        api_v0('services/%s/oncall/%s' % (service_name, role_name)))
    assert re.status_code == 200
    results = re.json()
    users = [ev['user'] for ev in results]
    assert user_name in users
    assert user_name_2 in users
    assert len(results) == 2
示例#20
0
def test_api_v0_update_team(team):
    team_name = team.create()
    new_team_name = "new-moninfra-update"
    email = '*****@*****.**'
    slack = '#slack'
    override_num = '1234'

    # setup DB state
    requests.delete(api_v0('teams/' + new_team_name))
    re = requests.get(api_v0('teams/' + new_team_name))
    assert re.status_code == 404

    re = requests.get(api_v0('teams/' + team_name))
    assert re.status_code == 200
    # edit team name/email/slack
    re = requests.put(api_v0('teams/' + team_name),
                      json={
                          'name': new_team_name,
                          'email': email,
                          'slack_channel': slack,
                          'override_phone_number': override_num
                      })
    assert re.status_code == 200
    team.mark_for_cleaning(new_team_name)
    # verify result
    re = requests.get(api_v0('teams/' + team_name))
    assert re.status_code == 404
    re = requests.get(api_v0('teams/' + new_team_name))
    assert re.status_code == 200
    data = re.json()
    assert data['email'] == email
    assert data['slack_channel'] == slack
    assert data['override_phone_number'] == override_num
示例#21
0
def test_api_v0_get_team(team, role, roster, schedule):
    team_name = team.create()
    role_name = role.create()
    roster_name = roster.create(team_name)
    schedule.create(
        team_name, roster_name, {
            'role': role_name,
            'events': [{
                'start': 0,
                'duration': 60 * 60 * 24 * 7
            }],
            'advanced_mode': 0
        })

    # by default, it should return everything
    re = requests.get(api_v0('teams/' + team_name))
    assert re.status_code == 200
    team = re.json()
    assert isinstance(team, dict)
    expected_set = {
        'users', 'admins', 'services', 'rosters', 'name', 'id',
        'slack_channel', 'slack_channel_notifications', 'email',
        'scheduling_timezone', 'iris_plan', 'iris_enabled',
        'override_phone_number'
    }
    assert expected_set == set(team.keys())

    # it should also support filter by fields
    re = requests.get(
        api_v0('teams/%s?fields=users&fields=services&fields=admins' %
               team_name))
    assert re.status_code == 200
    team = re.json()
    assert isinstance(team, dict)
    expected_set = {
        'users', 'admins', 'services', 'name', 'id', 'slack_channel',
        'slack_channel_notifications', 'email', 'scheduling_timezone',
        'iris_plan', 'iris_enabled', 'override_phone_number'
    }
    assert expected_set == set(team.keys())
示例#22
0
def test_api_v0_team_admin(team, user):

    team_name = team.create()
    re = requests.get(api_v0('teams/%s/admins') % team_name)
    assert re.status_code == 200
    # Make sure the test user was made an admin after making the team
    assert len(re.json()) == 1
    admin_user = user.create()

    # test create admin
    re = requests.post(api_v0('teams/%s/admins' % team_name),
                       json={'name': admin_user})
    assert re.status_code == 201
    # verify result
    re = requests.get(api_v0('teams/%s/admins' % team_name))
    assert re.status_code == 200
    assert admin_user in set(re.json())
    # user should be also added to team automatically
    re = requests.get(api_v0('teams/%s' % team_name))
    assert re.status_code == 200
    assert admin_user in re.json()['users']

    # test delete admin
    re = requests.delete(api_v0('teams/%s/admins/%s' %
                                (team_name, admin_user)))
    # verify result
    re = requests.get(api_v0('teams/%s/admins' % team_name))
    assert re.status_code == 200
    assert admin_user not in set(re.json())
示例#23
0
def test_api_v0_invalid_schedule_event(team, roster, role, schedule):
    team_name = team.create()
    roster_name = roster.create(team_name)
    role_name = role.create()
    api_url = api_v0('teams/%s/rosters/%s/schedules' %
                     (team_name, roster_name))
    re = requests.post(api_url,
                       json={
                           'role':
                           role_name,
                           'events': [{
                               'duration': 100
                           }, {
                               'start': 150,
                               'duration': 300
                           }],
                           'advanced_mode':
                           1
                       })
    assert re.status_code == 400

    re = requests.post(api_url,
                       json={
                           'role': role_name,
                           'events': [{
                               'start': 150
                           }],
                           'advanced_mode': 1
                       })
    assert re.status_code == 400

    re = requests.post(api_url,
                       json={
                           'role': role_name,
                           'events': [{
                               'start': 150,
                               'duration': 300
                           }],
                           'advanced_mode': 0
                       })
    assert re.status_code == 400

    re = requests.post(api_url,
                       json={
                           'role': role_name,
                           'events': 7 * [{
                               'start': 150,
                               'duration': 300
                           }],
                           'advanced_mode': 0
                       })
    assert re.status_code == 400
示例#24
0
def test_api_v0_populate_new(user, team, roster, role, schedule):
    user_name = user.create()
    user_name_2 = user.create()
    team_name = team.create()
    role_name = role.create()
    roster_name = roster.create(team_name)
    schedule_id = schedule.create(
        team_name, roster_name, {
            'role': role_name,
            'events': [{
                'start': 0,
                'duration': 604800
            }],
            'advanced_mode': 0,
            'auto_populate_threshold': 14
        })
    user.add_to_roster(user_name, team_name, roster_name)
    user.add_to_roster(user_name_2, team_name, roster_name)

    def clean_up():
        re = requests.get(api_v0('events?team=' + team_name))
        for ev in re.json():
            requests.delete(api_v0('events/%d' % ev['id']))

    clean_up()

    re = requests.post(api_v0('schedules/%s/populate' % schedule_id),
                       json={'start': time.time()})
    assert re.status_code == 200

    re = requests.get(api_v0('events?team=%s' % team_name))
    assert re.status_code == 200
    events = re.json()
    assert len(events) == 2
    users = set([ev['user'] for ev in events])
    assert user_name in users
    assert user_name_2 in users

    clean_up()
示例#25
0
def test_invalid_event_swap(team, user, role, event):
    team_name = team.create()
    user_name = user.create()
    role_name = role.create()
    user.add_to_team(user_name, team_name)

    start = int(time.time()) + 100

    ev1 = event.create({
        'start': start,
        'end': start + 1000,
        'user': user_name,
        'team': team_name,
        'role': role_name
    })

    # test swap with invalid event id
    re = requests.post(api_v0('events/swap'),
                       json={
                           'events': [{
                               'id': ev1,
                               'linked': False
                           }, {
                               'id': None,
                               'linked': False
                           }]
                       })
    assert re.status_code == 400

    # test swap without event id
    re = requests.post(
        api_v0('events/swap'),
        json={'events': [{
            'id': ev1,
            'linked': False
        }, {
            'linked': False
        }]})
    assert re.status_code == 400
示例#26
0
def test_notification_settings(team, user, role):
    team_name = team.create()
    team_name_2 = team.create()
    user_name = user.create()
    role_name = role.create()
    role_name_2 = role.create()

    def clean_up():
        re = requests.get(api_v0('events?team='+team_name))
        for ev in re.json():
            requests.delete(api_v0('events/%d' % ev['id']))

    clean_up()

    # test get notification settings, make sure there are none
    re = requests.get(api_v0('users/%s/notifications' % user_name))
    assert re.status_code == 200
    assert re.json() == []

    # test adding notification setting
    notification = {'team': team_name, 'roles': [role_name, role_name_2], 'mode': 'email', 'type': EVENT_CREATED,
                    'only_if_involved': True}
    re = requests.post(api_v0('users/%s/notifications' % user_name), json=notification)
    assert re.status_code == 201
    setting_id = re.json()['id']

    # check that setting values are correct
    re = requests.get(api_v0('users/%s/notifications' % user_name))
    assert re.status_code == 200
    data = re.json()
    assert len(data) == 1
    assert all([notification[key] == data[0][key] for key in notification])

    # test editing setting
    new_setting = {'team': team_name_2, 'roles': [role_name_2], 'mode': 'sms', 'type': EVENT_DELETED,
                   'only_if_involved': False}
    re = requests.put(api_v0('notifications/%s' % setting_id), json=new_setting)
    assert re.status_code == 200

    # check that setting now has new values
    re = requests.get(api_v0('users/%s/notifications' % user_name))
    assert re.status_code == 200
    data = re.json()
    assert len(data) == 1
    assert all([new_setting[key] == data[0][key] for key in new_setting])

    # test deleting setting
    re = requests.delete(api_v0('notifications/%s' % setting_id))
    assert re.status_code == 200

    # make sure it was deleted
    re = requests.get(api_v0('users/%s/notifications' % user_name))
    assert re.status_code == 200
    assert re.json() == []
示例#27
0
def test_api_v0_subscription_events(user, role, team, event):
    team_name = team.create()
    team_name_2 = team.create()
    user_name = user.create()
    role_name = role.create()
    user.add_to_team(user_name, team_name)
    user.add_to_team(user_name, team_name_2)
    start = int(time.time()) + 1000
    ev1 = event.create({
        'start': start,
        'end': start + 1000,
        'user': user_name,
        'team': team_name,
        'role': role_name
    })
    ev2 = event.create({
        'start': start + 1000,
        'end': start + 2000,
        'user': user_name,
        'team': team_name_2,
        'role': role_name
    })
    re = requests.post(api_v0('teams/%s/subscriptions' % team_name),
                       json={
                           'role': role_name,
                           'subscription': team_name_2
                       })
    assert re.status_code == 201
    re = requests.get(api_v0('events?team__eq=%s' % team_name))
    ev_ids = [ev['id'] for ev in re.json()]
    assert ev1 in ev_ids
    assert ev2 in ev_ids

    re = requests.get(
        api_v0('events?team__eq=%s&include_subscribed=False' % team_name))
    ev_ids = [ev['id'] for ev in re.json()]
    assert ev1 in ev_ids
    assert len(ev_ids) == 1
示例#28
0
def test_api_v0_team_current_oncall(team, user, role, event):
    team_name = team.create()
    user_name = user.create()
    user_name_2 = user.create()
    role_name = role.create()
    role_name_2 = role.create()
    user.add_to_team(user_name, team_name)
    user.add_to_team(user_name_2, team_name)

    start, end = int(time.time()), int(time.time() + 36000)

    event_data_1 = {
        'start': start,
        'end': end,
        'user': user_name,
        'team': team_name,
        'role': role_name
    }
    event_data_2 = {
        'start': start - 5,
        'end': end - 5,
        'user': user_name_2,
        'team': team_name,
        'role': role_name_2
    }
    event.create(event_data_1)
    event.create(event_data_2)

    re = requests.get(api_v0('teams/%s/oncall/%s' % (team_name, role_name)))
    assert re.status_code == 200
    results = re.json()
    assert results[0]['start'] == start
    assert results[0]['end'] == end

    re = requests.get(api_v0('teams/%s/oncall' % team_name))
    assert re.status_code == 200
    results = re.json()
    assert len(results) == 2
示例#29
0
def test_api_v0_fill_gap_new_user(user, team, role, roster, event):
    user_name = user.create()
    user_name_2 = user.create()
    user_name_3 = user.create()
    user_name_4 = user.create()
    user_name_5 = user.create()
    team_name = team.create()
    role_name = role.create()
    roster_name = roster.create(team_name)
    start = int(time.time()) + 100
    user.add_to_roster(user_name, team_name, roster_name)
    user.add_to_roster(user_name_2, team_name, roster_name)
    user.add_to_roster(user_name_3, team_name, roster_name)
    user.add_to_roster(user_name_4, team_name, roster_name)
    user.add_to_roster(user_name_5, team_name, roster_name)
    event.create({
        'start': start,
        'end': start + 1000,
        'user': user_name,
        'team': team_name,
        'role': role_name
    })
    event.create({
        'start': start + 1000,
        'end': start + 2000,
        'user': user_name_2,
        'team': team_name,
        'role': role_name
    })
    event.create({
        'start': start + 3000,
        'end': start + 4000,
        'user': user_name_3,
        'team': team_name,
        'role': role_name
    })
    event.create({
        'start': start + 4000,
        'end': start + 5000,
        'user': user_name_4,
        'team': team_name,
        'role': role_name
    })
    re = requests.get(
        api_v0(
            'teams/%s/rosters/%s/%s/suggest?start=%s&end=%s' %
            (team_name, roster_name, role_name, start + 2000, start + 3000)))
    assert re.status_code == 200
    assert re.json()['user'] == user_name_5
示例#30
0
def test_notify_on_override(user, role, team, event):
    user_name = user.create()
    user_name_2 = user.create()
    team_name = team.create()
    role_name = role.create()
    user.add_to_team(user_name, team_name)
    user.add_to_team(user_name_2, team_name)

    start, end = int(time.time() + 100), int(time.time() + 36000)

    ev_id = event.create({
        'start': start,
        'end': end,
        'user': user_name,
        'team': team_name,
        'role': role_name,
    })

    # set up notification settings
    notification = {'team': team_name, 'roles': [role_name], 'mode': 'email', 'type': EVENT_SUBSTITUTED,
                    'only_if_involved': True}
    re = requests.post(api_v0('users/%s/notifications' % user_name), json=notification)
    assert re.status_code == 201
    re = requests.post(api_v0('users/%s/notifications' % user_name_2), json=notification)
    assert re.status_code == 201

    re = requests.post(api_v0('events/override'),
                       json={'start': start + 200,
                             'end': end - 200,
                             'event_ids': [ev_id],
                             'user': user_name_2})
    assert re.status_code == 200

    notifications = get_notifications([user_name, user_name_2], EVENT_SUBSTITUTED)
    assert len(notifications) == 2
    assert {n['user'] for n in notifications} == {user_name, user_name_2}