Ejemplo n.º 1
0
 def test_user(self):
     repo = Repository(full_name=self.full_name,
                       provider=self.provider,
                       identifier=0)
     # Don't allow saving if not linked to a user
     with pytest.raises(ValidationError):
         repo.save()
Ejemplo n.º 2
0
 def test_defaults(self):
     repo = Repository(user=self.user)
     # checking default values
     assert not repo.active
     assert repo.full_name is None
     assert repo.provider is None
     # Don't allow none objects to be saved
     with pytest.raises(IntegrityError):
         repo.save()
Ejemplo n.º 3
0
class GitmateTestCase(RecordedTestCase):
    """
    A base class for setting up a dummy user, request factory and a repo for
    the user.
    """
    active = False
    upmate = True

    def setUp(self):
        # Reconfigure gitmate for tests
        reinit_plugin('testplugin')

        self.factory = APIRequestFactory()

        self.user = User.objects.create_user(
            username='******',
            email='*****@*****.**',
            first_name='John',
            last_name='Appleseed')

        self.auth = UserSocialAuth(user=self.user,
                                   provider=Providers.GITHUB.value,
                                   uid=1)
        self.auth.set_extra_data({
            'access_token':
            os.environ['GITHUB_TEST_TOKEN'],
            'id':
            16681030,
        })
        self.auth.save()
        self.gl_auth = UserSocialAuth(user=self.user,
                                      provider=Providers.GITLAB.value,
                                      uid=2)
        self.gl_auth.set_extra_data({
            'access_token':
            os.environ['GITLAB_TEST_TOKEN'],
            'id':
            1369631,
        })
        self.gl_auth.save()
        self.gh_app_auth = UserSocialAuth(user=self.user,
                                          provider=Providers.GITHUB_APP.value,
                                          uid=1)
        self.gh_app_auth.set_extra_data({
            'access_token':
            os.environ['GITHUB_TEST_TOKEN'],
            'id':
            16681030
        })
        self.gh_app_auth.save()

        self.repo = Repository(user=self.user,
                               identifier=49558751,
                               full_name=os.environ['GITHUB_TEST_REPO'],
                               provider=Providers.GITHUB.value,
                               active=self.active)
        self.repo.save()  # Needs an ID before adding relationship

        self.org = Organization(
            name=os.environ['GITHUB_TEST_REPO'].split('/', maxsplit=1)[0],
            primary_user=self.user,
            provider='github',
        )
        self.org.save()  # Needs an ID before adding relationship

        self.gh_inst = Installation(provider='github', identifier=1)
        self.gh_inst.save()  # Needs an ID before adding relationship
        self.gh_inst.admins.add(self.user)
        self.gh_inst.save()

        self.gh_app_repo = Repository(identifier=49558751,
                                      full_name=os.environ['GITHUB_TEST_REPO'],
                                      provider=Providers.GITHUB_APP.value,
                                      active=self.active,
                                      installation=self.gh_inst)
        self.gh_app_repo.save()  # Needs an ID before adding relationship

        self.repo.admins.add(self.user)
        self.org.admins.add(self.user)
        self.repo.save()
        self.org.save()
        self.gl_repo = Repository(user=self.user,
                                  identifier=3439658,
                                  full_name=os.environ['GITLAB_TEST_REPO'],
                                  provider=Providers.GITLAB.value,
                                  active=self.active)
        self.gl_repo.save()
        self.gl_repo.admins.add(self.user)
        self.gl_repo.save()

    def setUpWithPlugin(self, name: str):
        self.plugin = name
        self.plugin_config = apps.get_app_config(f'gitmate_{self.plugin}')

        GitmateTestCase.setUp(self)

        self.repo.plugins.append(self.plugin)
        self.repo.active = True
        self.repo.save()

        self.gl_repo.plugins.append(self.plugin)
        self.gl_repo.active = True
        self.gl_repo.save()

    def simulate_scheduled_responder_call(self, event: str, repo: Repository):
        ResponderRegistrar.respond(event, repo.igitt_repo, repo=repo)

    def simulate_github_webhook_call(self, event: str, data: dict):
        request = self.factory.post(reverse('webhooks:github'),
                                    data,
                                    format='json')
        hashed = hmac.new(bytes(os.environ['WEBHOOK_SECRET'], 'utf-8'),
                          request.body, sha1)
        signature = 'sha1=' + hashed.hexdigest()
        request.META.update({
            'HTTP_X_HUB_SIGNATURE': signature,
            'HTTP_X_GITHUB_EVENT': event,
        })

        return github_webhook_receiver(request)

    def simulate_gitlab_webhook_call(self, event: str, data: dict):
        request = self.factory.post(reverse('webhooks:gitlab'),
                                    data,
                                    format='json')
        request.META.update({
            'HTTP_X_GITLAB_TOKEN': os.environ['WEBHOOK_SECRET'],
            'HTTP_X_GITLAB_EVENT': event
        })
        return gitlab_webhook_receiver(request)