Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implemented GitHub.doArchive #473

Merged
merged 2 commits into from
Sep 25, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions src/main/java/org/kohsuke/github/GHRepository.java
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,29 @@ public void delete() throws IOException {
}
}

/**
* Will archive and this repository as read-only. When a repository is archived, any operation
* that can change its state is forbidden. This applies symmetrically if trying to unarchive it.
*
* <p>When you try to do any operation that modifies a read-only repository, it returns the
* response:
*
* <pre>
* org.kohsuke.github.HttpException: {
* "message":"Repository was archived so is read-only.",
* "documentation_url":"https://developer.github.com/v3/repos/#edit"
* }
* </pre>
*
* @throws IOException In case of any networking error or error from the server.
*/
public void archive() throws IOException {
edit("archived", "true");
// Generall would not update this record,
// but do so here since this will result in any other update actions failing
archived = true;
bitwiseman marked this conversation as resolved.
Show resolved Hide resolved
}

/**
* Sort orders for listing forks
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import java.util.Properties;

import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static org.junit.Assume.assumeFalse;

/**
* @author Liam Newman
Expand All @@ -29,8 +30,10 @@ public abstract class AbstractGitHubApiWireMockTest extends Assert {

private final GitHubBuilder githubBuilder = createGitHubBuilder();

public final static String STUBBED_USER_LOGIN = "placeholder-user";
public final static String STUBBED_USER_PASSWORD = "placeholder-password";
final static String GITHUB_API_TEST_ORG = "github-api-test-org";

final static String STUBBED_USER_LOGIN = "placeholder-user";
final static String STUBBED_USER_PASSWORD = "placeholder-password";

/**
* {@link GitHub} instance for use during test.
Expand Down Expand Up @@ -109,4 +112,9 @@ public void wireMockSetup() throws Exception {
gitHubBeforeAfter = null;
}
}

protected void snapshotNotAllowed() {
assumeFalse("Test contains hand written mappings. Only valid when not taking a snapshot.", githubApi.isTakeSnapshot());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/**
* @author Kohsuke Kawaguchi
*/
public class PullRequestTest extends AbstractGitHubApiWireMockTest {
public class GHPullRequestTest extends AbstractGitHubApiWireMockTest {

@Before
@After
Expand Down
39 changes: 39 additions & 0 deletions src/test/java/org/kohsuke/github/GHRepositoryTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.kohsuke.github;

import org.junit.Test;

import java.io.IOException;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.*;
import static org.junit.Assume.assumeFalse;

/**
* @author Liam Newman
*/
public class GHRepositoryTest extends AbstractGitHubApiWireMockTest {

@Test
public void archive() throws Exception {
snapshotNotAllowed();

// Archive is a one-way action in the API.
// We do thi this one
GHRepository repo = getRepository();

assertThat(repo.isArchived(), is(false));

repo.archive();

assertThat(repo.isArchived(), is(true));
assertThat(getRepository().isArchived(), is(true));
}

protected GHRepository getRepository() throws IOException {
return getRepository(gitHub);
}

private GHRepository getRepository(GitHub gitHub) throws IOException {
return gitHub.getOrganization("github-api-test-org").getRepository("github-api");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class WireMockStatusReporterTest extends AbstractGitHubApiWireMockTest {

@Test
public void user_whenProxying_AuthCorrectlyConfigured() throws Exception {
assumeFalse("Test only valid when not taking a snapshot", githubApi.isTakeSnapshot());
snapshotNotAllowed();
assumeTrue("Test only valid when proxying (-Dtest.github.useProxy to enable)", githubApi.isUseProxy());

assertThat(
Expand All @@ -42,7 +42,7 @@ public void user_whenProxying_AuthCorrectlyConfigured() throws Exception {

@Test
public void user_whenNotProxying_Stubbed() throws Exception {
assumeFalse("Test only valid when not taking a snapshot", githubApi.isTakeSnapshot());
snapshotNotAllowed();
assumeFalse("Test only valid when not proxying", githubApi.isUseProxy());

assertThat(gitHub.isAnonymous(), is(false));
Expand All @@ -59,7 +59,7 @@ public void user_whenNotProxying_Stubbed() throws Exception {

@Test
public void BasicBehaviors_whenNotProxying() throws Exception {
assumeFalse("Test only valid when not taking a snapshot", githubApi.isTakeSnapshot());
snapshotNotAllowed();
assumeFalse("Test only valid when not proxying", githubApi.isUseProxy());

Exception e = null;
Expand Down Expand Up @@ -96,7 +96,7 @@ public void BasicBehaviors_whenNotProxying() throws Exception {

@Test
public void BasicBehaviors_whenProxying() throws Exception {
assumeFalse("Test only valid when not taking a snapshot", githubApi.isTakeSnapshot());
snapshotNotAllowed();
assumeTrue("Test only valid when proxying (-Dtest.github.useProxy to enable)", githubApi.isUseProxy());
Exception e = null;
GHRepository repo = null;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"login":"github-api-test-org","id":7544739,"node_id":"MDEyOk9yZ2FuaXphdGlvbjc1NDQ3Mzk=","url":"https://api.github.com/orgs/github-api-test-org","repos_url":"https://api.github.com/orgs/github-api-test-org/repos","events_url":"https://api.github.com/orgs/github-api-test-org/events","hooks_url":"https://api.github.com/orgs/github-api-test-org/hooks","issues_url":"https://api.github.com/orgs/github-api-test-org/issues","members_url":"https://api.github.com/orgs/github-api-test-org/members{/member}","public_members_url":"https://api.github.com/orgs/github-api-test-org/public_members{/member}","avatar_url":"https://avatars3.githubusercontent.com/u/7544739?v=4","description":null,"is_verified":false,"has_organization_projects":true,"has_repository_projects":true,"public_repos":9,"public_gists":0,"followers":0,"following":0,"html_url":"https://github.com/github-api-test-org","created_at":"2014-05-10T19:39:11Z","updated_at":"2015-04-20T00:42:30Z","type":"Organization","total_private_repos":0,"owned_private_repos":0,"private_gists":0,"disk_usage":132,"collaborators":0,"billing_email":"kk@kohsuke.org","default_repository_permission":"none","members_can_create_repositories":false,"two_factor_requirement_enabled":false,"members_allowed_repository_creation_type":"none","plan":{"name":"free","space":976562499,"private_repos":0,"filled_seats":3,"seats":0}}

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"login":"bitwiseman","id":1958953,"node_id":"MDQ6VXNlcjE5NTg5NTM=","avatar_url":"https://avatars3.githubusercontent.com/u/1958953?v=4","gravatar_id":"","url":"https://api.github.com/users/bitwiseman","html_url":"https://github.com/bitwiseman","followers_url":"https://api.github.com/users/bitwiseman/followers","following_url":"https://api.github.com/users/bitwiseman/following{/other_user}","gists_url":"https://api.github.com/users/bitwiseman/gists{/gist_id}","starred_url":"https://api.github.com/users/bitwiseman/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bitwiseman/subscriptions","organizations_url":"https://api.github.com/users/bitwiseman/orgs","repos_url":"https://api.github.com/users/bitwiseman/repos","events_url":"https://api.github.com/users/bitwiseman/events{/privacy}","received_events_url":"https://api.github.com/users/bitwiseman/received_events","type":"User","site_admin":false,"name":"Liam Newman","company":"Cloudbees, Inc.","blog":"","location":"Seattle, WA, USA","email":"bitwiseman@gmail.com","hireable":null,"bio":"https://twitter.com/bitwiseman","public_repos":166,"public_gists":4,"followers":135,"following":9,"created_at":"2012-07-11T20:38:33Z","updated_at":"2019-09-24T19:32:29Z"}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"id" : "cb173af2-c793-444a-acdf-c3850e7afdbe",
"name" : "orgs_github-api-test-org",
"request" : {
"url" : "/orgs/github-api-test-org",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "orgs_github-api-test-org-cb173af2-c793-444a-acdf-c3850e7afdbe.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:58 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "github.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4989",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"b7989d48e6539c9c76038995b902421b\"",
"Last-Modified" : "Mon, 20 Apr 2015 00:42:30 GMT",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "admin:org, read:org, repo, user, write:org",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F855:59E1:1397ED7:171400E:5D8BF9DE"
}
},
"uuid" : "cb173af2-c793-444a-acdf-c3850e7afdbe",
"persistent" : true,
"insertionIndex" : 2
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"id" : "0a4d7a1a-f99c-47ca-840a-3e920c18bd1f",
"name" : "repos_github-api-test-org_github-api",
"request" : {
"url" : "/repos/github-api-test-org/github-api",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "repos_github-api-test-org_github-api-0a4d7a1a-f99c-47ca-840a-3e920c18bd1f.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:58 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "github.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4988",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"0678d1c39ea574f68cc0fb330b067cb7\"",
"Last-Modified" : "Wed, 25 Sep 2019 23:32:35 GMT",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "repo",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F855:59E1:1397EEB:1714029:5D8BF9DE"
}
},
"uuid" : "0a4d7a1a-f99c-47ca-840a-3e920c18bd1f",
"persistent" : true,
"scenarioName" : "scenario-1-repos-github-api-test-org-github-api",
"requiredScenarioState" : "Started",
"newScenarioState" : "scenario-1-repos-github-api-test-org-github-api-2",
"insertionIndex" : 3
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
{
"id" : "1c529d7c-99f0-43ae-8231-044f48beac1a",
"name" : "repos_github-api-test-org_github-api",
"request" : {
"url" : "/repos/github-api-test-org/github-api",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "repos_github-api-test-org_github-api-1c529d7c-99f0-43ae-8231-044f48beac1a.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:59 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "github.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4986",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"e40487cafd3670c0de171f4250dbefb8\"",
"Last-Modified" : "Wed, 25 Sep 2019 23:35:59 GMT",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "repo",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F855:59E1:1397F42:1714091:5D8BF9DF"
}
},
"uuid" : "1c529d7c-99f0-43ae-8231-044f48beac1a",
"persistent" : true,
"scenarioName" : "scenario-1-repos-github-api-test-org-github-api",
"requiredScenarioState" : "scenario-1-repos-github-api-test-org-github-api-2",
"insertionIndex" : 5
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
{
"id" : "2c69d5c8-dd81-4204-bad9-ee37f5b0ebfd",
"name" : "repos_github-api-test-org_github-api",
"request" : {
"url" : "/repos/github-api-test-org/github-api",
"method" : "PATCH",
"bodyPatterns" : [ {
"equalToJson" : "{\"archived\":\"true\",\"name\":\"github-api\"}",
"ignoreArrayOrder" : true,
"ignoreExtraElements" : true
} ]
},
"response" : {
"status" : 200,
"bodyFileName" : "repos_github-api-test-org_github-api-2c69d5c8-dd81-4204-bad9-ee37f5b0ebfd.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:59 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "github.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4987",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"e40487cafd3670c0de171f4250dbefb8\"",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F855:59E1:1397F0E:1714041:5D8BF9DE"
}
},
"uuid" : "2c69d5c8-dd81-4204-bad9-ee37f5b0ebfd",
"persistent" : true,
"insertionIndex" : 4
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"id" : "7f6e9a01-5bfa-4f72-9947-07df902f56c3",
"name" : "user",
"request" : {
"url" : "/user",
"method" : "GET"
},
"response" : {
"status" : 200,
"bodyFileName" : "user-7f6e9a01-5bfa-4f72-9947-07df902f56c3.json",
"headers" : {
"Date" : "Wed, 25 Sep 2019 23:35:33 GMT",
"Content-Type" : "application/json; charset=utf-8",
"Server" : "github.com",
"Status" : "200 OK",
"X-RateLimit-Limit" : "5000",
"X-RateLimit-Remaining" : "4992",
"X-RateLimit-Reset" : "1569457884",
"Cache-Control" : "private, max-age=60, s-maxage=60",
"Vary" : [ "Accept, Authorization, Cookie, X-GitHub-OTP", "Accept-Encoding" ],
"ETag" : "W/\"14ffd29009ddc2209c450bb29a5a8330\"",
"Last-Modified" : "Tue, 24 Sep 2019 19:32:29 GMT",
"X-OAuth-Scopes" : "gist, notifications, read:org, read:public_key, read:repo_hook, repo",
"X-Accepted-OAuth-Scopes" : "",
"X-GitHub-Media-Type" : "unknown, github.v3",
"Access-Control-Expose-Headers" : "ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type",
"Access-Control-Allow-Origin" : "*",
"Strict-Transport-Security" : "max-age=31536000; includeSubdomains; preload",
"X-Frame-Options" : "deny",
"X-Content-Type-Options" : "nosniff",
"X-XSS-Protection" : "1; mode=block",
"Referrer-Policy" : "origin-when-cross-origin, strict-origin-when-cross-origin",
"Content-Security-Policy" : "default-src 'none'",
"X-GitHub-Request-Id" : "F845:5D1D:FFA88A:12FE539:5D8BF9C5"
}
},
"uuid" : "7f6e9a01-5bfa-4f72-9947-07df902f56c3",
"persistent" : true,
"insertionIndex" : 1
}