def test_update_mw_case_5(self, mw_update_mock): """Test successful update.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=[ '00:00:00:00:00:00:12:23' ]), '4567': MW(start2, end2, self.controller, items=[ '12:34:56:78:90:ab:cd:ef' ]) } start_new = datetime.utcnow() + timedelta(days=1, hours=3) end_new = start_new - timedelta(hours=5) payload = { "start": start_new.strftime(TIME_FMT), "end": end_new.strftime(TIME_FMT) } mw_update_mock.side_effect = ValueError('End before start not ' 'allowed.') url = f'{self.server_name_url}/1234' response = self.api.patch(url, data=json.dumps(payload), content_type='application/json') current_data = json.loads(response.data) self.assertEqual(response.status_code, 400) self.assertEqual(current_data, 'End before start not allowed.') mw_update_mock.assert_called_once_with(payload)
def test_get_mw_case_4(self, mw_as_dict_mock): """Test get existent id.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=[ '00:00:00:00:00:00:12:23' ]), '4567': MW(start2, end2, self.controller, items=[ '12:34:56:78:90:ab:cd:ef' ]) } mw_dict = { 'id': '4567', 'start': start2.strftime(TIME_FMT), 'end': end2.strftime(TIME_FMT), 'items': [ '12:34:56:78:90:ab:cd:ef' ] } mw_as_dict_mock.return_value = mw_dict url = f'{self.server_name_url}/4567' response = self.api.get(url) current_data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual(current_data, mw_dict) mw_as_dict_mock.assert_called_once()
def test_update_mw_case_3(self, mw_update_mock, sched_remove_mock, sched_add_mock): """Test successful update.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=[ '00:00:00:00:00:00:12:23' ]), '4567': MW(start2, end2, self.controller, items=[ '12:34:56:78:90:ab:cd:ef' ]) } start_new = datetime.utcnow() + timedelta(days=1, hours=3) payload = { "start": start_new.strftime(TIME_FMT), } url = f'{self.server_name_url}/1234' response = self.api.patch(url, data=json.dumps(payload), content_type='application/json') current_data = json.loads(response.data) self.assertEqual(response.status_code, 201) self.assertEqual(current_data, {'response': 'Maintenance 1234 updated'}) mw_update_mock.assert_called_once_with(payload) sched_add_mock.assert_called_once() sched_remove_mock.assert_called_once()
def test_end_mw_case_4(self): """Test method that finishes the maintenance now.""" start1 = datetime.now(pytz.utc) - timedelta(hours=5) end1 = start1 + timedelta(hours=4) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=['00:00:00:00:00:00:12:23']), '4567': MW(start2, end2, self.controller, items=['12:34:56:78:90:ab:cd:ef']) } url = f'{self.server_name_url}/1234/end' response = self.api.patch(url) current_data = json.loads(response.data) self.assertEqual(response.status_code, 400) self.assertEqual( current_data, {'response': 'Maintenance window 1234 has already ' 'finished.'})
def test_update_mw_case_1(self): """Test update non-existent id.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=['00:00:00:00:00:00:12:23']), '4567': MW(start2, end2, self.controller, items=['12:34:56:78:90:ab:cd:ef']) } payload = { "start": start1.strftime(TIME_FMT), } url = f'{self.server_name_url}/2345' response = self.api.patch(url, data=json.dumps(payload), content_type='application/json') current_data = json.loads(response.data) self.assertEqual(response.status_code, 404) self.assertEqual(current_data, {'response': 'Maintenance with id 2345 ' 'not found'})
def test_update_mw_case_2(self): """Test update no data.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=['00:00:00:00:00:00:12:23']), '4567': MW(start2, end2, self.controller, items=['12:34:56:78:90:ab:cd:ef']) } payload = { "start": start1.strftime(TIME_FMT), } url = f'{self.server_name_url}/1234' response = self.api.patch(url, data=json.dumps(payload), content_type='text/plain') current_data = json.loads(response.data) self.assertEqual(response.status_code, 415) self.assertEqual(current_data, 'Bad request: The request do not have a json.')
def test_remove_mw_case_2(self, sched_remove_mock): """Test remove existent id.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=['00:00:00:00:00:00:12:23']), '4567': MW(start2, end2, self.controller, items=['12:34:56:78:90:ab:cd:ef']) } url = f'{self.server_name_url}/1234' response = self.api.delete(url) current_data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual( current_data, {'response': 'Maintenance with id 1234 ' 'successfully removed'}) sched_remove_mock.assert_called_once() self.assertEqual(len(self.napp.maintenances), 1)
def test_remove_mw_case_1(self): """Test remove non-existent id.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=['00:00:00:00:00:00:12:23']), '4567': MW(start2, end2, self.controller, items=['12:34:56:78:90:ab:cd:ef']) } url = f'{self.server_name_url}/2345' response = self.api.delete(url) current_data = json.loads(response.data) self.assertEqual(response.status_code, 404) self.assertEqual(current_data, {'response': 'Maintenance with id 2345 ' 'not found'})
def test_remove_mw_case_3(self): """Test remove existent id.""" start1 = datetime.now(pytz.utc) - timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, status=Status.RUNNING, items=['00:00:00:00:00:00:12:23']), '4567': MW(start2, end2, self.controller, items=['12:34:56:78:90:ab:cd:ef']) } url = f'{self.server_name_url}/1234' response = self.api.delete(url) current_data = json.loads(response.data) self.assertEqual(response.status_code, 400) self.assertEqual(current_data['description'], 'Deleting a running maintenance is not allowed')
def test_get_mw_case_3(self, mw_as_dict_mock): """Test get non-existent id.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=['00:00:00:00:00:00:12:23']), '4567': MW(start2, end2, self.controller, items=['12:34:56:78:90:ab:cd:ef']) } url = f'{self.server_name_url}/2345' response = self.api.get(url) current_data = json.loads(response.data) self.assertEqual(response.status_code, 404) self.assertEqual(current_data['description'], 'Maintenance with id 2345 not found') mw_as_dict_mock.assert_not_called()
def setUp(self): """Initialize before tests are executed.""" self.controller = get_controller_mock() self.start = datetime.datetime.now(pytz.utc) self.start += datetime.timedelta(days=1) self.end = self.start + datetime.timedelta(hours=6) self.items = ["01:23:45:67:89:ab:cd:ef"] self.maintenance = MW(self.start, self.end, self.controller, items=self.items)
def test_get_mw_case_2(self, mw_as_dict_mock): """Test get all maintenance windows.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=[ '00:00:00:00:00:00:12:23' ]), '4567': MW(start2, end2, self.controller, items=[ '12:34:56:78:90:ab:cd:ef' ]) } mw_dict = [ { 'id': '1234', 'start': start1.strftime(TIME_FMT), 'end': end1.strftime(TIME_FMT), 'items': [ '00:00:00:00:00:00:12:23' ] }, { 'id': '4567', 'start': start2.strftime(TIME_FMT), 'end': end2.strftime(TIME_FMT), 'items': [ '12:34:56:78:90:ab:cd:ef' ] } ] mw_as_dict_mock.side_effect = mw_dict url = f'{self.server_name_url}' response = self.api.get(url) current_data = json.loads(response.data) self.assertEqual(response.status_code, 200) self.assertEqual(current_data, mw_dict) self.assertEqual(mw_as_dict_mock.call_count, 2)
def test_end_mw_case_1(self): """Test method that finishes the maintenance now.""" start1 = datetime.now(pytz.utc) + timedelta(days=1) end1 = start1 + timedelta(hours=6) start2 = datetime.now(pytz.utc) + timedelta(hours=5) end2 = start2 + timedelta(hours=1, minutes=30) self.napp.maintenances = { '1234': MW(start1, end1, self.controller, items=['00:00:00:00:00:00:12:23']), '4567': MW(start2, end2, self.controller, items=['12:34:56:78:90:ab:cd:ef']) } url = f'{self.server_name_url}/2345/end' response = self.api.patch(url) current_data = json.loads(response.data) self.assertEqual(response.status_code, 404) self.assertEqual(current_data['description'], 'Maintenance with id 2345 not found')