-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
9 changed files
with
172 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
namespace Gitea.Declarative.Test | ||
|
||
open System | ||
open System.Threading.Tasks | ||
open FsCheck | ||
open Gitea.InMemory | ||
open Gitea.Declarative | ||
open FsUnitTyped | ||
open Microsoft.Extensions.Logging.Abstractions | ||
open NUnit.Framework | ||
|
||
[<TestFixture>] | ||
[<RequireQualifiedAccess>] | ||
module TestUser = | ||
|
||
[<Test>] | ||
let ``We set MustChangePassword on creating a user`` () = | ||
Arb.register<CustomArb> () |> ignore | ||
|
||
let property (desiredUser : UserInfo) = | ||
let result = TaskCompletionSource<bool option> () | ||
|
||
let client = | ||
{ GiteaClientMock.Unimplemented with | ||
AdminCreateUser = | ||
fun options -> | ||
async { | ||
result.SetResult options.MustChangePassword | ||
return null | ||
} | ||
|> Async.StartAsTask | ||
} | ||
|
||
[ User "username", AlignmentError.DoesNotExist desiredUser ] | ||
|> Map.ofList | ||
|> Gitea.reconcileUserErrors NullLogger.Instance (fun _ -> failwith "do not ask for user input") client | ||
|> Async.RunSynchronously | ||
|
||
result.Task.Wait (TimeSpan.FromSeconds 10.0) |> shouldEqual true | ||
|
||
result.Task.Result |> shouldEqual (Some true) | ||
|
||
Check.QuickThrowOnFailure property |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
namespace Gitea.InMemory | ||
|
||
open System | ||
open Gitea.Declarative | ||
|
||
type private ServerState = | ||
{ | ||
Users : Map<User, Gitea.CreateUserOption> | ||
Repos : (User * Repo) list | ||
} | ||
|
||
member this.WithUser (create : Gitea.CreateUserOption) : ServerState = | ||
let user = User create.Username | ||
|
||
match Map.tryFind user this.Users with | ||
| Some _ -> | ||
create.Username | ||
|> failwithf "Behaviour of in-memory Gitea is not defined for adding the same user multiple times. Got: %s" | ||
| None -> | ||
{ this with | ||
Users = Map.add user create this.Users | ||
} | ||
|
||
static member Empty = | ||
{ | ||
Users = Map.empty | ||
Repos = [] | ||
} | ||
|
||
type private ServerMessage = | AddUser of Gitea.CreateUserOption * AsyncReplyChannel<unit> | ||
|
||
type Server = | ||
private | ||
| Server of MailboxProcessor<ServerMessage> | ||
|
||
interface IDisposable with | ||
member this.Dispose () = | ||
match this with | ||
| Server t -> t.Dispose () | ||
|
||
[<RequireQualifiedAccess>] | ||
module Client = | ||
|
||
let rec private loop (state : ServerState) (mailbox : MailboxProcessor<ServerMessage>) : Async<unit> = | ||
async { | ||
let! message = mailbox.Receive () | ||
|
||
match message with | ||
| ServerMessage.AddUser (user, reply) -> | ||
reply.Reply () | ||
return! loop (state.WithUser user) mailbox | ||
} | ||
|
||
let make () : Server * IGiteaClient = | ||
let server = MailboxProcessor.Start (loop ServerState.Empty) | ||
|
||
let client = | ||
{ new IGiteaClient with | ||
member _.AdminGetAllUsers (page, limit) = failwith "Not implemented" | ||
|
||
member _.AdminCreateUser createUserOption = | ||
async { | ||
let! () = server.PostAndAsyncReply (fun reply -> AddUser (createUserOption, reply)) | ||
let result = Gitea.User () | ||
result.Email <- createUserOption.Email | ||
result.Restricted <- createUserOption.Restricted | ||
// TODO: what is this username used for anyway | ||
// result.LoginName <- createUserOption.Username | ||
result.Visibility <- createUserOption.Visibility | ||
result.Created <- createUserOption.CreatedAt | ||
result.FullName <- createUserOption.FullName | ||
result.LoginName <- createUserOption.LoginName | ||
return result | ||
} | ||
|> Async.StartAsTask | ||
|
||
member _.AdminDeleteUser user = failwith "Not implemented" | ||
|
||
member _.AdminEditUser (user, editUserOption) = failwith "Not implemented" | ||
|
||
member _.AdminCreateRepo (user, createRepoOption) = failwith "Not implemented" | ||
|
||
member _.UserListRepos (user, page, count) = failwith "Not implemented" | ||
|
||
member _.RepoAddPushMirror (user, repo, createPushMirrorOption) = failwith "Not implemented" | ||
|
||
member _.RepoListPushMirrors (loginName, userName, page, count) = failwith "Not implemented" | ||
|
||
member _.RepoListBranchProtection (loginName, userName) = failwith "Not implemented" | ||
|
||
member _.RepoDeleteBranchProtection (user, repo, branch) = failwith "Not implemented" | ||
|
||
member _.RepoCreateBranchProtection (user, repo, createBranchProtectionOption) = | ||
failwith "Not implemented" | ||
|
||
member _.RepoEditBranchProtection (user, repo, branch, editBranchProtectionOption) = | ||
failwith "Not implemented" | ||
|
||
member _.RepoMigrate migrateRepoOptions = failwith "Not implemented" | ||
|
||
member _.RepoGet (user, repo) = failwith "Not implemented" | ||
|
||
member _.RepoDelete (user, repo) = failwith "Not implemented" | ||
|
||
member _.RepoEdit (user, repo, editRepoOption) = failwith "Not implemented" | ||
|
||
member _.RepoListCollaborators (loginName, userName, page, count) = failwith "Not implemented" | ||
|
||
member _.RepoAddCollaborator (user, repo, collaborator) = failwith "Not implemented" | ||
|
||
member _.RepoDeleteCollaborator (user, repo, collaborator) = failwith "Not implemented" | ||
} | ||
|
||
Server server, client |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters