You've already forked oncall
mirror of
https://github.com/linkedin/oncall.git
synced 2025-11-27 23:18:38 +02:00
195 lines
6.5 KiB
Python
195 lines
6.5 KiB
Python
# Copyright (c) LinkedIn Corporation. All rights reserved. Licensed under the BSD-2 Clause license.
|
|
# See LICENSE in the project root for license information.
|
|
|
|
import requests
|
|
import time
|
|
from testutils import prefix,api_v0
|
|
|
|
start, end = int(time.time()), int(time.time() + 36000)
|
|
start = start / 1000 * 1000
|
|
end = end / 1000 * 1000
|
|
|
|
|
|
# Helper function to send an override request
|
|
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
|
|
|
|
|
|
# Test override when events need to be split
|
|
@prefix('test_v0_override_split')
|
|
def test_api_v0_override_split(team, user, role, event):
|
|
team_name = team.create()
|
|
user_name = user.create()
|
|
override_user = user.create()
|
|
role_name = role.create()
|
|
user.add_to_team(user_name, team_name)
|
|
user.add_to_team(override_user, team_name)
|
|
|
|
ev_id = event.create({'start': start,
|
|
'end': end,
|
|
'user': user_name,
|
|
'team': team_name,
|
|
'role': role_name})
|
|
|
|
re = override(start + 100, end - 100, [ev_id], override_user)
|
|
data = re.json()
|
|
assert len(data) == 3
|
|
|
|
re = requests.get(api_v0('events?user=' + user_name))
|
|
events = sorted(re.json(), key=lambda x: x['start'])
|
|
assert len(events) == 2
|
|
assert events[0]['end'] == start + 100
|
|
assert events[1]['start'] == end - 100
|
|
|
|
re = requests.get(api_v0('events?user=' + override_user))
|
|
events = re.json()
|
|
assert events[0]['start'] == start + 100
|
|
assert events[0]['end'] == end - 100
|
|
|
|
|
|
# Test override when an event's start needs to be edited
|
|
@prefix('test_v0_override_edit_start')
|
|
def test_api_v0_override_edit_start(team, user, role, event):
|
|
team_name = team.create()
|
|
user_name = user.create()
|
|
override_user = user.create()
|
|
role_name = role.create()
|
|
user.add_to_team(user_name, team_name)
|
|
user.add_to_team(override_user, team_name)
|
|
|
|
ev_id = event.create({'start': start,
|
|
'end': end,
|
|
'user': user_name,
|
|
'team': team_name,
|
|
'role': role_name})
|
|
|
|
re = override(start, end - 100, [ev_id], override_user)
|
|
data = re.json()
|
|
assert len(data) == 2
|
|
|
|
re = requests.get(api_v0('events?user=' + user_name))
|
|
events = re.json()
|
|
assert len(events) == 1
|
|
assert events[0]['end'] == end
|
|
assert events[0]['start'] == end - 100
|
|
|
|
re = requests.get(api_v0('events?user=' + override_user))
|
|
events = re.json()
|
|
assert events[0]['start'] == start
|
|
assert events[0]['end'] == end - 100
|
|
|
|
|
|
# Test override when an event's end needs to be edited
|
|
@prefix('test_api_v0_override_edit_end')
|
|
def test_api_v0_override_edit_end(team, user, role, event):
|
|
team_name = team.create()
|
|
user_name = user.create()
|
|
override_user = user.create()
|
|
role_name = role.create()
|
|
user.add_to_team(user_name, team_name)
|
|
user.add_to_team(override_user, team_name)
|
|
|
|
ev_id = event.create({'start': start,
|
|
'end': end,
|
|
'user': user_name,
|
|
'team': team_name,
|
|
'role': role_name})
|
|
|
|
re = override(start + 100, end, [ev_id], override_user)
|
|
data = re.json()
|
|
assert len(data) == 2
|
|
|
|
re = requests.get(api_v0('events?user=' + user_name))
|
|
events = re.json()
|
|
assert len(events) == 1
|
|
assert events[0]['end'] == start + 100
|
|
assert events[0]['start'] == start
|
|
|
|
re = requests.get(api_v0('events?user=' + override_user))
|
|
events = re.json()
|
|
assert events[0]['start'] == start + 100
|
|
assert events[0]['end'] == end
|
|
|
|
|
|
# Test override when an event needs to be deleted
|
|
@prefix('test_api_v0_override_delete')
|
|
def test_api_v0_override_delete(team, user, role, event):
|
|
team_name = team.create()
|
|
user_name = user.create()
|
|
override_user = user.create()
|
|
role_name = role.create()
|
|
user.add_to_team(user_name, team_name)
|
|
user.add_to_team(override_user, team_name)
|
|
|
|
ev_id = event.create({'start': start,
|
|
'end': end,
|
|
'user': user_name,
|
|
'team': team_name,
|
|
'role': role_name})
|
|
|
|
re = override(start - 10, end + 10, [ev_id], override_user)
|
|
assert len(re.json()) == 1
|
|
|
|
re = requests.get(api_v0('events?user=' + user_name))
|
|
events = re.json()
|
|
assert len(events) == 0
|
|
|
|
re = requests.get(api_v0('events?user=' + override_user))
|
|
events = re.json()
|
|
assert events[0]['start'] == start
|
|
assert events[0]['end'] == end
|
|
|
|
|
|
# Test combination of above cases
|
|
@prefix('test_api_v0_override_multiple')
|
|
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=' + user_name))
|
|
events = sorted(re.json(), key=lambda x: x['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=' + override_user))
|
|
events = re.json()
|
|
assert events[0]['start'] == start
|
|
assert events[0]['end'] == end
|