import pytest from data import model from endpoints.api.repository import Repository from endpoints.api.build import (RepositoryBuildList, RepositoryBuildResource, RepositoryBuildStatus, RepositoryBuildLogs) from endpoints.api.image import RepositoryImageList, RepositoryImage from endpoints.api.manifest import RepositoryManifestLabels, ManageRepositoryManifestLabel from endpoints.api.repositorynotification import (RepositoryNotification, RepositoryNotificationList, TestRepositoryNotification) from endpoints.api.secscan import RepositoryImageSecurity, RepositoryManifestSecurity from endpoints.api.tag import ListRepositoryTags, RepositoryTag, RepositoryTagImages, RestoreTag from endpoints.api.trigger import (BuildTriggerList, BuildTrigger, BuildTriggerSubdirs, BuildTriggerActivate, BuildTriggerAnalyze, ActivateBuildTrigger, TriggerBuildList, BuildTriggerFieldValues, BuildTriggerSources, BuildTriggerSourceNamespaces) from endpoints.api.test.shared import client_with_identity, conduct_api_call from endpoints.test.fixtures import app, appconfig, database_uri, init_db_path, sqlitedb_file BUILD_ARGS = {'build_uuid': '1234'} IMAGE_ARGS = {'imageid': '1234', 'image_id': 1234} MANIFEST_ARGS = {'manifestref': 'sha256:abcd1234'} LABEL_ARGS = {'manifestref': 'sha256:abcd1234', 'labelid': '1234'} NOTIFICATION_ARGS = {'uuid': '1234'} TAG_ARGS = {'tag': 'foobar'} TRIGGER_ARGS = {'trigger_uuid': '1234'} FIELD_ARGS = {'trigger_uuid': '1234', 'field_name': 'foobar'} @pytest.mark.parametrize('resource, method, params', [ (Repository, 'delete', None), (RepositoryBuildList, 'get', None), (RepositoryBuildList, 'post', None), (RepositoryBuildResource, 'get', BUILD_ARGS), (RepositoryBuildResource, 'delete', BUILD_ARGS), (RepositoryBuildStatus, 'get', BUILD_ARGS), (RepositoryBuildLogs, 'get', BUILD_ARGS), (RepositoryImageList, 'get', None), (RepositoryImage, 'get', IMAGE_ARGS), (RepositoryManifestLabels, 'get', MANIFEST_ARGS), (RepositoryManifestLabels, 'post', MANIFEST_ARGS), (ManageRepositoryManifestLabel, 'get', LABEL_ARGS), (ManageRepositoryManifestLabel, 'delete', LABEL_ARGS), (RepositoryNotificationList, 'get', None), (RepositoryNotificationList, 'post', None), (RepositoryNotification, 'get', NOTIFICATION_ARGS), (RepositoryNotification, 'delete', NOTIFICATION_ARGS), (TestRepositoryNotification, 'post', NOTIFICATION_ARGS), (RepositoryImageSecurity, 'get', IMAGE_ARGS), (RepositoryManifestSecurity, 'get', MANIFEST_ARGS), (ListRepositoryTags, 'get', None), (RepositoryTag, 'put', TAG_ARGS), (RepositoryTag, 'delete', TAG_ARGS), (RepositoryTagImages, 'get', TAG_ARGS), (RestoreTag, 'post', TAG_ARGS), (BuildTriggerList, 'get', None), (BuildTrigger, 'get', TRIGGER_ARGS), (BuildTrigger, 'delete', TRIGGER_ARGS), (BuildTriggerSubdirs, 'post', TRIGGER_ARGS), (BuildTriggerActivate, 'post', TRIGGER_ARGS), (BuildTriggerAnalyze, 'post', TRIGGER_ARGS), (ActivateBuildTrigger, 'post', TRIGGER_ARGS), (TriggerBuildList, 'get', TRIGGER_ARGS), (BuildTriggerFieldValues, 'post', FIELD_ARGS), (BuildTriggerSources, 'post', TRIGGER_ARGS), (BuildTriggerSourceNamespaces, 'get', TRIGGER_ARGS), ]) def test_disallowed_for_apps(resource, method, params, client): namespace = 'devtable' repository = 'someapprepo' devtable = model.user.get_user('devtable') model.repository.create_repository(namespace, repository, devtable, repo_kind='application') params = params or {} params['repository'] = '%s/%s' % (namespace, repository) with client_with_identity('devtable', client) as cl: conduct_api_call(cl, resource, method, params, None, 501)