From ce4b199fe472c23f37376fc2e30e946c93bd4952 Mon Sep 17 00:00:00 2001
From: Egor Tensin <Egor.Tensin@gmail.com>
Date: Fri, 30 Jul 2021 21:39:13 +0300
Subject: add some unit tests

This is a first step towards integrating with GitHub/Bitbucket properly.
---
 .github/workflows/ci.yml |  8 ++++++--
 .gitignore               |  1 +
 requirements.txt         |  2 ++
 test/__init__.py         |  0
 test/test_bitbucket.py   | 34 ++++++++++++++++++++++++++++++++++
 test/test_github.py      | 26 ++++++++++++++++++++++++++
 6 files changed, 69 insertions(+), 2 deletions(-)
 create mode 100644 requirements.txt
 create mode 100644 test/__init__.py
 create mode 100644 test/test_bitbucket.py
 create mode 100644 test/test_github.py

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 2867eda..da2f831 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -23,8 +23,12 @@ jobs:
         run: |
           git config --global user.name 'John Doe'
           git config --global user.email 'John.Doe@example.com'
-      - name: Test
+      - name: Install dependencies
+        run: pip install -r requirements.txt
+      - name: Integration tests
         run: ./.ci/local/test.sh
+      - name: Unit tests
+        run: python -m unittest --buffer
 
   test_docker:
     runs-on: ubuntu-latest
@@ -32,7 +36,7 @@ jobs:
     steps:
       - name: Checkout
         uses: actions/checkout@v2
-      - name: Test
+      - name: Integration tests
         run: ./.ci/docker/test.sh
 
   publish_docker:
diff --git a/.gitignore b/.gitignore
index 8b77993..5935c49 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
 __pycache__/
 *.pyc
+/.venv/
 
 /build/
 /dist/
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..f8d7d23
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,2 @@
+PyGithub ~= 1.0
+atlassian-python-api ~= 3.0
diff --git a/test/__init__.py b/test/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/test/test_bitbucket.py b/test/test_bitbucket.py
new file mode 100644
index 0000000..776c48c
--- /dev/null
+++ b/test/test_bitbucket.py
@@ -0,0 +1,34 @@
+# Copyright (c) 2021 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "cgitize" project.
+# For details, see https://github.com/egor-tensin/cgitize.
+# Distributed under the MIT License.
+
+import unittest
+
+from atlassian.bitbucket.cloud import Cloud
+from requests.exceptions import HTTPError
+
+
+class BitbucketTests(unittest.TestCase):
+    def setUp(self):
+        self.bitbucket = Cloud(cloud=True)
+
+    def test_nonexistent_repo(self):
+        with self.assertRaises(HTTPError):
+            self.bitbucket.repositories.get('doesnot/exist')
+
+    def test_existing_repo(self):
+        r = self.bitbucket.repositories.get('egor-tensin/cgitize-test-repository')
+        self.assertEqual(r['name'], 'cgitize-test-repository')
+        self.assertEqual(r['description'], 'Test cgitize repository')
+
+        https_links = [link for link in r['links']['clone'] if link['name'] == 'https']
+        self.assertEqual(len(https_links), 1)
+        self.assertEqual(https_links[0]['href'], 'https://bitbucket.org/egor-tensin/cgitize-test-repository.git')
+
+        ssh_links = [link for link in r['links']['clone'] if link['name'] == 'ssh']
+        self.assertEqual(len(ssh_links), 1)
+        self.assertEqual(ssh_links[0]['href'], 'git@bitbucket.org:egor-tensin/cgitize-test-repository.git')
+
+        self.assertEqual(r['owner']['display_name'], 'Egor Tensin')
+        self.assertEqual(r['owner']['nickname'], 'egor-tensin')
diff --git a/test/test_github.py b/test/test_github.py
new file mode 100644
index 0000000..ab96ecc
--- /dev/null
+++ b/test/test_github.py
@@ -0,0 +1,26 @@
+# Copyright (c) 2021 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "cgitize" project.
+# For details, see https://github.com/egor-tensin/cgitize.
+# Distributed under the MIT License.
+
+import unittest
+
+from github import Github, GithubException
+
+
+class GitHubTests(unittest.TestCase):
+    def setUp(self):
+        self.github = Github()
+
+    def test_nonexistent_repo(self):
+        with self.assertRaises(GithubException):
+            self.github.get_repo('doesnot/exist')
+
+    def test_existing_repo(self):
+        r = self.github.get_repo('egor-tensin/cgitize-test-repository')
+        self.assertEqual(r.name, 'cgitize-test-repository')
+        self.assertEqual(r.description, 'Test cgitize repository')
+        self.assertEqual(r.clone_url, 'https://github.com/egor-tensin/cgitize-test-repository.git')
+        self.assertEqual(r.ssh_url, 'git@github.com:egor-tensin/cgitize-test-repository.git')
+        self.assertEqual(r.owner.name, 'Egor Tensin')
+        self.assertEqual(r.owner.login, 'egor-tensin')
-- 
cgit v1.2.3