Example #1
0
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"
Example #2
0
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()
Example #3
0
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()
Example #4
0
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())
Example #5
0
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()
Example #6
0
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()
Example #7
0
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 == []
Example #8
0
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') == []
Example #9
0
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 == []
Example #10
0
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
Example #11
0
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') == []
Example #12
0
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') == []
Example #13
0
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") == []
Example #14
0
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 == []
Example #15
0
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'
Example #16
0
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()
Example #17
0
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()
Example #18
0
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())
Example #19
0
def test_pull_with_no_config(watson):
    config = ConfigParser()
    watson.config = config

    with pytest.raises(ConfigurationError):
        watson.pull()
Example #20
0
def test_push_with_no_config(watson):
    config = ConfigParser()
    watson.config = config

    with pytest.raises(WatsonError):
        watson.push(arrow.now())
Example #21
0
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 == []
Example #22
0
def test_set_config(watson):
    config = ConfigParser()
    config.set('foo', 'bar', 'lol')
    watson.config = config

    watson.config.get('foo', 'bar') == 'lol'