diff --git a/docs/resources/repository.md b/docs/resources/repository.md index a519a3f..ab10cea 100644 --- a/docs/resources/repository.md +++ b/docs/resources/repository.md @@ -176,6 +176,7 @@ import { - `allow_rebase` (Boolean) Allowed to rebase then fast-forward? **Note**: This setting is only effective if `has_pull_requests` is `true`. - `allow_rebase_explicit` (Boolean) Allowed to rebase then create merge commit? **Note**: This setting is only effective if `has_pull_requests` is `true`. - `allow_squash_merge` (Boolean) Allowed to create squash commit? **Note**: This setting is only effective if `has_pull_requests` is `true`. +- `archive_on_destroy` (Boolean) Archive the repo instead of delete? - `archived` (Boolean) Is the repository archived? - `auth_token` (String, Sensitive) API token for authenticating with migrate / clone URL. **Note**: This setting is only effective if `clone_addr` is set. - `auto_init` (Boolean) Whether the repository should be auto-intialized? diff --git a/internal/provider/repository_resource.go b/internal/provider/repository_resource.go index 0f46a99..7c64e47 100644 --- a/internal/provider/repository_resource.go +++ b/internal/provider/repository_resource.go @@ -105,6 +105,7 @@ type repositoryResourceModel struct { Milestones types.Bool `tfsdk:"milestones"` Labels types.Bool `tfsdk:"labels"` Service types.String `tfsdk:"service"` + ArchiveOnDestroy types.Bool `tfsdk:"archive_on_destroy"` } // from is a helper function to load an API struct into Terraform data model. @@ -980,6 +981,12 @@ Note: Managing user repositories requires administrative privileges!`, ), }, }, + "archive_on_destroy": schema.BoolAttribute{ + Description: "Archive the repo instead of delete?", + Computed: true, + Optional: true, + Default: booldefault.StaticBool(false), + }, }, } } @@ -1503,48 +1510,74 @@ func (r *repositoryResource) Delete(ctx context.Context, req resource.DeleteRequ return } - tflog.Info(ctx, "Delete repository", map[string]any{ - "owner": data.Owner.ValueString(), - "name": data.Name.ValueString(), - }) - - // Use Forgejo client to delete existing repository - res, err := r.client.DeleteRepo( - data.Owner.ValueString(), - data.Name.ValueString(), + var ( + res *forgejo.Response + err error ) - if err != nil { - var msg string - if res == nil { - msg = fmt.Sprintf("Unknown error with nil response: %s", err) - } else { - tflog.Error(ctx, "Error", map[string]any{ - "status": res.Status, - }) - switch res.StatusCode { - case 403: - msg = fmt.Sprintf( - "Repository with owner %s and name %s forbidden: %s", - data.Owner.String(), - data.Name.String(), - err, - ) - case 404: - msg = fmt.Sprintf( - "Repository with owner %s and name %s not found: %s", - data.Owner.String(), - data.Name.String(), - err, - ) - default: - msg = fmt.Sprintf("Unknown error: %s", err) - } + if data.ArchiveOnDestroy.ValueBool() { + tflog.Info(ctx, "Archive repository", map[string]any{ + "owner": data.Owner.ValueString(), + "name": data.Name.ValueString(), + }) + + archive := true + opts := forgejo.EditRepoOption{ + Archived: &archive, } - resp.Diagnostics.AddError("Unable to delete repository", msg) + _, res, err = r.client.EditRepo( + data.Owner.ValueString(), + data.Name.ValueString(), + opts, + ) + } else { + tflog.Info(ctx, "Delete repository", map[string]any{ + "owner": data.Owner.ValueString(), + "name": data.Name.ValueString(), + }) + + // Use Forgejo client to delete existing repository + res, err = r.client.DeleteRepo( + data.Owner.ValueString(), + data.Name.ValueString(), + ) + } + + if err == nil { return } + + var msg string + if res == nil { + msg = fmt.Sprintf("Unknown error with nil response: %s", err) + } else { + tflog.Error(ctx, "Error", map[string]any{ + "status": res.Status, + }) + + switch res.StatusCode { + case 403: + msg = fmt.Sprintf( + "Repository with owner %s and name %s forbidden: %s", + data.Owner.String(), + data.Name.String(), + err, + ) + case 404: + msg = fmt.Sprintf( + "Repository with owner %s and name %s not found: %s", + data.Owner.String(), + data.Name.String(), + err, + ) + case 422: + msg = fmt.Sprintf("Input validation error: %s", err) + default: + msg = fmt.Sprintf("Unknown error: %s", err) + } + } + resp.Diagnostics.AddError("Unable to delete repository", msg) } // ImportState reads an existing resource and adds it to Terraform state on success. diff --git a/internal/provider/repository_resource_test.go b/internal/provider/repository_resource_test.go index 68573e5..bcf4214 100644 --- a/internal/provider/repository_resource_test.go +++ b/internal/provider/repository_resource_test.go @@ -1444,6 +1444,232 @@ resource "forgejo_repository" "test" { statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("website"), knownvalue.StringExact("")), }, }, + // Archive on destroy testing (organisation repo; creation) + { + Config: providerConfig + ` +resource "forgejo_organization" "owner" { + name = "test_org" +} +resource "forgejo_repository" "test" { + owner = forgejo_organization.owner.name + name = "tftest" + archive_on_destroy = true +}`, + ConfigStateChecks: []statecheck.StateCheck{ + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_manual_merge"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_merge_commits"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_rebase_explicit"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_rebase"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_squash_merge"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("archived"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("archive_on_destroy"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("auto_init"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("autodetect_manual_merge"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("avatar_url"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("clone_addr"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("clone_url"), knownvalue.StringExact("http://localhost:3000/test_org/tftest.git")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("created_at"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("default_branch"), knownvalue.StringExact("main")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("default_merge_style"), knownvalue.StringExact("merge")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("description"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("empty"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("external_tracker"), knownvalue.Null()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("external_wiki"), knownvalue.Null()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("fork"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("forks_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("full_name"), knownvalue.StringExact("test_org/tftest")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("gitignores"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_actions"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_issues"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_packages"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_projects"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_pull_requests"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_releases"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_wiki"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("html_url"), knownvalue.StringExact("http://localhost:3000/test_org/tftest")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("id"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("ignore_whitespace_conflicts"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("internal_tracker"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("internal"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("issue_labels"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("labels"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("lfs_endpoint"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("lfs"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("license"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("milestones"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("mirror_interval"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("mirror_updated"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("mirror"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("name"), knownvalue.StringExact("tftest")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("open_issues_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("open_pr_counter"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("owner"), knownvalue.StringExact("test_org")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("parent_id"), knownvalue.Null()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("permissions"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("private"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("readme"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("release_counter"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("service"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("size"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("ssh_url"), knownvalue.StringExact("ssh://git@localhost:2222/test_org/tftest.git")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("stars_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("template"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("trust_model"), knownvalue.StringExact("default")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("updated_at"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("watchers_count"), knownvalue.Int64Exact(1)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("website"), knownvalue.StringExact("")), + }, + }, + // Archive on destroy testing (organisation repo; destroying) + { + Config: providerConfig + ` +resource "forgejo_organization" "owner" { + name = "test_org" +}`, + }, + // Archive on destroy testing (organisation repo; reading after destroy) + { + Config: providerConfig + ` +resource "forgejo_organization" "owner" { + name = "test_org" +} +data "forgejo_repository" "test" { + owner = forgejo_organization.owner.name + name = "tftest" +}`, + ConfigStateChecks: []statecheck.StateCheck{ + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("allow_merge_commits"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("allow_rebase_explicit"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("allow_rebase"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("allow_squash_merge"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("archived"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("avatar_url"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("clone_addr"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("clone_url"), knownvalue.StringExact("http://localhost:3000/test_org/tftest.git")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("created_at"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("default_branch"), knownvalue.StringExact("main")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("default_merge_style"), knownvalue.StringExact("merge")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("description"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("empty"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("external_tracker"), knownvalue.Null()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("external_wiki"), knownvalue.Null()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("fork"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("forks_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("full_name"), knownvalue.StringExact("test_org/tftest")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("has_actions"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("has_issues"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("has_packages"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("has_projects"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("has_pull_requests"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("has_releases"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("has_wiki"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("html_url"), knownvalue.StringExact("http://localhost:3000/test_org/tftest")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("id"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("ignore_whitespace_conflicts"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("internal_tracker"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("internal"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("mirror_interval"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("mirror_updated"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("mirror"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("name"), knownvalue.StringExact("tftest")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("open_issues_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("open_pr_counter"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("owner"), knownvalue.StringExact("test_org")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("parent_id"), knownvalue.Null()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("permissions"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("private"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("release_counter"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("size"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("ssh_url"), knownvalue.StringExact("ssh://git@localhost:2222/test_org/tftest.git")), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("stars_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("template"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("updated_at"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("watchers_count"), knownvalue.Int64Exact(1)), + statecheck.ExpectKnownValue("data.forgejo_repository.test", tfjsonpath.New("website"), knownvalue.StringExact("")), + }, + }, + // Archive on destroy testing (organisation repo; importing -- unarchives) + { + Config: providerConfig + ` +resource "forgejo_organization" "owner" { + name = "test_org" +} +resource "forgejo_repository" "test" { + owner = forgejo_organization.owner.name + name = "tftest" +} +data "forgejo_repository" "import_test" { + owner = forgejo_organization.owner.name + name = "tftest" +} +import { + id = "test_org/tftest" + to = forgejo_repository.test +}`, + ConfigStateChecks: []statecheck.StateCheck{ + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_manual_merge"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_merge_commits"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_rebase_explicit"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_rebase"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("allow_squash_merge"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("archived"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("auto_init"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("autodetect_manual_merge"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("avatar_url"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("clone_addr"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("clone_url"), knownvalue.StringExact("http://localhost:3000/test_org/tftest.git")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("created_at"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("default_branch"), knownvalue.StringExact("main")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("default_merge_style"), knownvalue.StringExact("merge")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("description"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("empty"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("external_tracker"), knownvalue.Null()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("external_wiki"), knownvalue.Null()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("fork"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("forks_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("full_name"), knownvalue.StringExact("test_org/tftest")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("gitignores"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_actions"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_issues"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_packages"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_projects"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_pull_requests"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_releases"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("has_wiki"), knownvalue.Bool(true)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("html_url"), knownvalue.StringExact("http://localhost:3000/test_org/tftest")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("id"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("ignore_whitespace_conflicts"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("internal_tracker"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("internal"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("issue_labels"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("labels"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("lfs_endpoint"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("lfs"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("license"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("milestones"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("mirror_interval"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("mirror_updated"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("mirror"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("name"), knownvalue.StringExact("tftest")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("open_issues_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("open_pr_counter"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("owner"), knownvalue.StringExact("test_org")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("parent_id"), knownvalue.Null()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("permissions"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("private"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("readme"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("release_counter"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("service"), knownvalue.StringExact("")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("size"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("ssh_url"), knownvalue.StringExact("ssh://git@localhost:2222/test_org/tftest.git")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("stars_count"), knownvalue.Int64Exact(0)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("template"), knownvalue.Bool(false)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("trust_model"), knownvalue.StringExact("default")), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("updated_at"), knownvalue.NotNull()), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("watchers_count"), knownvalue.Int64Exact(1)), + statecheck.ExpectKnownValue("forgejo_repository.test", tfjsonpath.New("website"), knownvalue.StringExact("")), + }, + }, // Delete testing automatically occurs in TestCase }, })