from unittest import TestCase, mock import pytest from requests import Session import core.config import core.widget import modules.contrib.gitlab pytest.importorskip("requests") def build_gitlab_module(actions=""): config = core.config.Config(["-p", "gitlab.actions={}".format(actions)]) return modules.contrib.gitlab.Module(config=config, theme=None) def mock_todo_api_response(): res = mock.Mock() res.json = lambda: [ {"action_name": "assigned"}, {"action_name": "assigned"}, {"action_name": "approval_required"}, ] res.status_code = 200 return res class TestGitlabUnit(TestCase): def test_load_module(self): __import__("modules.contrib.gitlab") @mock.patch.object(Session, "get", return_value=mock_todo_api_response()) def test_unfiltered(self, _): module = build_gitlab_module() module.update() assert module.widgets()[0].full_text() == "3" @mock.patch.object(Session, "get", return_value=mock_todo_api_response()) def test_filtered(self, _): module = build_gitlab_module(actions="approval_required") module.update() assert module.widgets()[0].full_text() == "1" @mock.patch.object(Session, "get", return_value=mock_todo_api_response()) def test_state_warning(self, _): module = build_gitlab_module(actions="approval_required") module.update() assert module.state(None) == ["warning"] @mock.patch.object(Session, "get", return_value=mock_todo_api_response()) def test_state_normal(self, _): module = build_gitlab_module(actions="empty_filter") module.update() assert module.state(None) == [] @mock.patch.object(Session, "get", return_value=mock_todo_api_response()) def test_state_normal_before_update(self, _): module = build_gitlab_module(actions="approval_required") assert module.state(None) == [] @mock.patch.object(Session, "get", side_effect=Exception("Something went wrong")) def test_state_normal_if_na(self, _): module = build_gitlab_module(actions="approval_required") module.update() assert module.state(None) == []