def test_set_config(watson): config = ConfigParser() config.add_section("foo") config.set("foo", "bar", "lol") watson.config = config watson.config.get("foo", "bar") == "lol"
def test_pull_with_no_url(watson): config = ConfigParser() config.add_section("backend") config.set("backend", "token", "bar") watson.config = config with pytest.raises(WatsonError): watson.pull()
def test_pull_with_no_token(watson): config = ConfigParser() config.add_section("backend") config.set("backend", "url", "http://foo.com") watson.config = config with pytest.raises(WatsonError): watson.pull()
def test_push_with_no_url(watson): config = ConfigParser() config.add_section('backend') config.set('backend', 'token', 'bar') watson.config = config with pytest.raises(WatsonError): watson.push(arrow.now())
def test_pull_with_no_token(watson): config = ConfigParser() config.add_section('backend') config.set('backend', 'url', 'http://foo.com') watson.config = config with pytest.raises(ConfigurationError): watson.pull()
def test_pull_with_no_url(watson): config = ConfigParser() config.add_section('backend') config.set('backend', 'token', 'bar') watson.config = config with pytest.raises(ConfigurationError): watson.pull()
def test_pull(watson, monkeypatch): config = ConfigParser() config.add_section('backend') config.set('backend', 'url', 'http://foo.com') config.set('backend', 'token', 'bar') watson.last_sync = arrow.now() watson.frames.add('foo', 1, 2, ['A', 'B'], id='1') monkeypatch.setattr(watson, '_get_remote_projects', lambda *args: [ {'name': 'foo', 'url': '/projects/1/'}, {'name': 'bar', 'url': '/projects/2/'}, ]) class Response: def __init__(self): self.status_code = 200 def json(self): return [ {'project': '/projects/1/', 'start': 3, 'stop': 4, 'id': '1', 'tags': ['A']}, {'project': '/projects/2/', 'start': 4, 'stop': 5, 'id': '2', 'tags': []} ] with mock.patch('requests.get') as mock_get: mock_get.return_value = Response() with mock.patch.object( Watson, 'config', new_callable=mock.PropertyMock ) as mock_config: mock_config.return_value = config watson.pull() requests.get.assert_called_once_with( mock.ANY, params={'last_sync': watson.last_sync}, headers={ 'content-type': 'application/json', 'Authorization': "Token " + config.get('backend', 'token') } ) assert len(watson.frames) == 2 assert watson.frames[0].id == '1' assert watson.frames[0].project == 'foo' assert watson.frames[0].start.timestamp == 3 assert watson.frames[0].stop.timestamp == 4 assert watson.frames[0].tags == ['A'] assert watson.frames[1].id == '2' assert watson.frames[1].project == 'bar' assert watson.frames[1].start.timestamp == 4 assert watson.frames[1].stop.timestamp == 5 assert watson.frames[1].tags == []
def test_push(watson, monkeypatch): config = ConfigParser() config.add_section('backend') config.set('backend', 'url', 'http://foo.com') config.set('backend', 'token', 'bar') watson.frames.add('foo', 1, 2) watson.frames.add('foo', 3, 4) watson.last_sync = arrow.now() watson.frames.add('bar', 1, 2, ['A', 'B']) watson.frames.add('lol', 1, 2) last_pull = arrow.now() watson.frames.add('foo', 1, 2) watson.frames.add('bar', 3, 4) monkeypatch.setattr(watson, '_get_remote_projects', lambda *args: [ {'name': 'foo', 'url': '/projects/1/'}, {'name': 'bar', 'url': '/projects/2/'}, {'name': 'lol', 'url': '/projects/3/'}, ]) class Response: def __init__(self): self.status_code = 201 with mock.patch('requests.post') as mock_put: mock_put.return_value = Response() with mock.patch.object( Watson, 'config', new_callable=mock.PropertyMock ) as mock_config: mock_config.return_value = config watson.push(last_pull) requests.post.assert_called_once_with( mock.ANY, mock.ANY, headers={ 'content-type': 'application/json', 'Authorization': "Token " + config.get('backend', 'token') } ) frames_sent = json.loads(mock_put.call_args[0][1]) assert len(frames_sent) == 2 assert frames_sent[0].get('project') == '/projects/2/' assert frames_sent[0].get('tags') == ['A', 'B'] assert frames_sent[1].get('project') == '/projects/3/' assert frames_sent[1].get('tags') == []
def test_save_config(mock, watson): mock.patch('%s.open' % builtins, mock.mock_open()) write_mock = mock.patch.object(ConfigParser, 'write') watson.config = ConfigParser() watson.save() assert write_mock.call_count == 1
def test_push(mocker, watson): config = ConfigParser() config.add_section('backend') config.set('backend', 'url', 'http://foo.com') config.set('backend', 'token', 'bar') watson.frames.add('foo', 4001, 4002) watson.frames.add('foo', 4003, 4004) watson.last_sync = arrow.now() watson.frames.add('bar', 4001, 4002, ['A', 'B']) watson.frames.add('lol', 4001, 4002) last_pull = arrow.now() watson.frames.add('foo', 4001, 4002) watson.frames.add('bar', 4003, 4004) mocker.patch.object(watson, '_get_remote_projects', return_value=[ {'name': 'foo', 'id': '08288b71-4500-40dd-96b1-a995937a15fd'}, {'name': 'bar', 'id': 'f0534272-65fa-4832-a49e-0eedf68b3a84'}, {'name': 'lol', 'id': '7fdaf65e-66bd-4c01-b09e-74bdc8cbe552'}, ]) class Response: def __init__(self): self.status_code = 201 mock_put = mocker.patch('requests.post', return_value=Response()) mocker.patch.object( Watson, 'config', new_callable=mocker.PropertyMock, return_value=config ) watson.push(last_pull) requests.post.assert_called_once_with( mocker.ANY, mocker.ANY, headers={ 'content-type': 'application/json', 'Authorization': "Token " + config.get('backend', 'token') } ) frames_sent = json.loads(mock_put.call_args[0][1]) assert len(frames_sent) == 2 assert frames_sent[0].get('project') == 'bar' assert frames_sent[0].get('tags') == ['A', 'B'] assert frames_sent[1].get('project') == 'lol' assert frames_sent[1].get('tags') == []
def test_push(watson, monkeypatch): config = ConfigParser() config.add_section("backend") config.set("backend", "url", "http://foo.com") config.set("backend", "token", "bar") watson.frames.add("foo", 1, 2) watson.frames.add("foo", 3, 4) watson.last_sync = arrow.now() watson.frames.add("bar", 1, 2, ["A", "B"]) watson.frames.add("lol", 1, 2) last_pull = arrow.now() watson.frames.add("foo", 1, 2) watson.frames.add("bar", 3, 4) monkeypatch.setattr( watson, "_get_remote_projects", lambda *args: [ {"name": "foo", "url": "/projects/1/"}, {"name": "bar", "url": "/projects/2/"}, {"name": "lol", "url": "/projects/3/"}, ], ) class Response: def __init__(self): self.status_code = 201 with mock.patch("requests.post") as mock_put: mock_put.return_value = Response() with mock.patch.object(Watson, "config", new_callable=mock.PropertyMock) as mock_config: mock_config.return_value = config watson.push(last_pull) requests.post.assert_called_once_with( mock.ANY, mock.ANY, headers={"content-type": "application/json", "Authorization": "Token " + config.get("backend", "token")}, ) frames_sent = json.loads(mock_put.call_args[0][1]) assert len(frames_sent) == 2 assert frames_sent[0].get("project") == "/projects/2/" assert frames_sent[0].get("tags") == ["A", "B"] assert frames_sent[1].get("project") == "/projects/3/" assert frames_sent[1].get("tags") == []
def test_pull(watson, monkeypatch): config = ConfigParser() config.add_section("backend") config.set("backend", "url", "http://foo.com") config.set("backend", "token", "bar") watson.last_sync = arrow.now() watson.frames.add("foo", 1, 2, ["A", "B"], id="1") monkeypatch.setattr( watson, "_get_remote_projects", lambda *args: [{"name": "foo", "url": "/projects/1/"}, {"name": "bar", "url": "/projects/2/"}], ) class Response: def __init__(self): self.status_code = 200 def json(self): return [ {"project": "/projects/1/", "start": 3, "stop": 4, "id": "1", "tags": ["A"]}, {"project": "/projects/2/", "start": 4, "stop": 5, "id": "2", "tags": []}, ] with mock.patch("requests.get") as mock_get: mock_get.return_value = Response() with mock.patch.object(Watson, "config", new_callable=mock.PropertyMock) as mock_config: mock_config.return_value = config watson.pull() requests.get.assert_called_once_with( mock.ANY, params={"last_sync": watson.last_sync}, headers={"content-type": "application/json", "Authorization": "Token " + config.get("backend", "token")}, ) assert len(watson.frames) == 2 assert watson.frames[0].id == "1" assert watson.frames[0].project == "foo" assert watson.frames[0].start.timestamp == 3 assert watson.frames[0].stop.timestamp == 4 assert watson.frames[0].tags == ["A"] assert watson.frames[1].id == "2" assert watson.frames[1].project == "bar" assert watson.frames[1].start.timestamp == 4 assert watson.frames[1].stop.timestamp == 5 assert watson.frames[1].tags == []
def test_set_config(watson): config = ConfigParser() config.add_section('foo') config.set('foo', 'bar', 'lol') watson.config = config watson.config.get('foo', 'bar') == 'lol'
def test_pull_with_no_config(watson): config = ConfigParser() watson.config = config with pytest.raises(ConfigurationError): watson.pull()
def test_push_with_no_config(watson): config = ConfigParser() watson.config = config with pytest.raises(WatsonError): watson.push(arrow.now())
def test_pull(mock, watson): config = ConfigParser() config.add_section('backend') config.set('backend', 'url', 'http://foo.com') config.set('backend', 'token', 'bar') watson.last_sync = arrow.now() watson.frames.add('foo', 1, 2, ['A', 'B'], id='1c006c6e6cc14c80ab22b51c857c0b06') mock.patch.object(watson, '_get_remote_projects', return_value=[ { 'name': 'foo', 'id': '08288b71-4500-40dd-96b1-a995937a15fd' }, { 'name': 'bar', 'id': 'f0534272-65fa-4832-a49e-0eedf68b3a84' }, ]) class Response: def __init__(self): self.status_code = 200 def json(self): return [{ 'id': '1c006c6e-6cc1-4c80-ab22-b51c857c0b06', 'project': 'foo', 'start_at': 3, 'end_at': 4, 'tags': ['A'] }, { 'id': 'c44aa815-4d77-4a58-bddd-1afa95562141', 'project': 'bar', 'start_at': 4, 'end_at': 5, 'tags': [] }] mock.patch('requests.get', return_value=Response()) mock.patch.object(Watson, 'config', new_callable=mock.PropertyMock, return_value=config) watson.pull() requests.get.assert_called_once_with( mock.ANY, params={'last_sync': watson.last_sync}, headers={ 'content-type': 'application/json', 'Authorization': "Token " + config.get('backend', 'token') }) assert len(watson.frames) == 2 assert watson.frames[0].id == '1c006c6e6cc14c80ab22b51c857c0b06' assert watson.frames[0].project == 'foo' assert watson.frames[0].start.timestamp == 3 assert watson.frames[0].stop.timestamp == 4 assert watson.frames[0].tags == ['A'] assert watson.frames[1].id == 'c44aa8154d774a58bddd1afa95562141' assert watson.frames[1].project == 'bar' assert watson.frames[1].start.timestamp == 4 assert watson.frames[1].stop.timestamp == 5 assert watson.frames[1].tags == []
def test_set_config(watson): config = ConfigParser() config.set('foo', 'bar', 'lol') watson.config = config watson.config.get('foo', 'bar') == 'lol'