From 6899d0e8334eabcf7fe3ce04d802d9d2f09cebf2 Mon Sep 17 00:00:00 2001 From: MiaKoring <143010553+MiaKoring@users.noreply.github.com> Date: Sun, 8 Dec 2024 15:30:52 +0100 Subject: [PATCH 1/5] Fixed Conflict with swifts Task renamed Meilisearch's Task to MTask --- Sources/MeiliSearch/Async/Client+async.swift | 6 +- Sources/MeiliSearch/Async/Indexes+async.swift | 2 +- Sources/MeiliSearch/Client.swift | 6 +- Sources/MeiliSearch/Indexes.swift | 2 +- Sources/MeiliSearch/Model/Task/Task.swift | 2 +- .../MeiliSearch/Model/Task/TaskDetails.swift | 2 +- Sources/MeiliSearch/Model/Task/TaskInfo.swift | 4 +- .../MeiliSearch/Model/Task/TaskStatus.swift | 2 +- .../MeiliSearch/Model/Task/TasksResults.swift | 2 +- .../QueryParameters/CancelTasksQuery.swift | 4 +- .../QueryParameters/DeleteTasksQuery.swift | 4 +- .../QueryParameters/TasksQuery.swift | 4 +- Sources/MeiliSearch/Tasks.swift | 16 ++--- .../DocumentsTests.swift | 20 +++--- .../DumpsTests.swift | 2 +- .../IndexesTests.swift | 10 +-- .../SettingsTests.swift | 64 +++++++++---------- Tests/MeiliSearchIntegrationTests/Utils.swift | 14 ++-- 18 files changed, 83 insertions(+), 83 deletions(-) diff --git a/Sources/MeiliSearch/Async/Client+async.swift b/Sources/MeiliSearch/Async/Client+async.swift index f4762115..f47e0e29 100644 --- a/Sources/MeiliSearch/Async/Client+async.swift +++ b/Sources/MeiliSearch/Async/Client+async.swift @@ -71,7 +71,7 @@ extension MeiliSearch { /** See `waitForTask(taskUid:options:_:)` */ - public func waitForTask(taskUid: Int, options: WaitOptions? = nil) async throws -> Task { + public func waitForTask(taskUid: Int, options: WaitOptions? = nil) async throws -> MTask { try await withCheckedThrowingContinuation { continuation in self.waitForTask(taskUid: taskUid, options: options) { result in continuation.resume(with: result) @@ -82,7 +82,7 @@ extension MeiliSearch { /** See `waitForTask(task:options:_:)` */ - public func waitForTask(task: TaskInfo, options: WaitOptions? = nil) async throws -> Task { + public func waitForTask(task: TaskInfo, options: WaitOptions? = nil) async throws -> MTask { try await withCheckedThrowingContinuation { continuation in self.waitForTask(task: task, options: options) { result in continuation.resume(with: result) @@ -93,7 +93,7 @@ extension MeiliSearch { /** See `getTask(taskUid:_:)` */ - public func getTask(taskUid: Int) async throws -> Task { + public func getTask(taskUid: Int) async throws -> MTask { try await withCheckedThrowingContinuation { continuation in self.getTask(taskUid: taskUid) { result in continuation.resume(with: result) diff --git a/Sources/MeiliSearch/Async/Indexes+async.swift b/Sources/MeiliSearch/Async/Indexes+async.swift index 91c3691e..10342572 100644 --- a/Sources/MeiliSearch/Async/Indexes+async.swift +++ b/Sources/MeiliSearch/Async/Indexes+async.swift @@ -159,7 +159,7 @@ extension Indexes { /** See `getTask(taskUid:_:)` */ - public func getTask(taskUid: Int) async throws -> Task { + public func getTask(taskUid: Int) async throws -> MTask { try await withCheckedThrowingContinuation { continuation in self.getTask(taskUid: taskUid) { result in continuation.resume(with: result) diff --git a/Sources/MeiliSearch/Client.swift b/Sources/MeiliSearch/Client.swift index 5215bb59..30b433b9 100755 --- a/Sources/MeiliSearch/Client.swift +++ b/Sources/MeiliSearch/Client.swift @@ -151,7 +151,7 @@ public struct MeiliSearch { public func waitForTask( taskUid: Int, options: WaitOptions? = nil, - _ completion: @escaping (Result + _ completion: @escaping (Result ) -> Void) { self.tasks.waitForTask(taskUid: taskUid, options: options, completion) } @@ -169,7 +169,7 @@ public struct MeiliSearch { public func waitForTask( task: TaskInfo, options: WaitOptions? = nil, - _ completion: @escaping (Result + _ completion: @escaping (Result ) -> Void) { self.tasks.waitForTask(taskUid: task.taskUid, options: options, completion) } @@ -186,7 +186,7 @@ public struct MeiliSearch { */ public func getTask( taskUid: Int, - _ completion: @escaping (Result) -> Void) { + _ completion: @escaping (Result) -> Void) { self.tasks.get(taskUid: taskUid, completion) } diff --git a/Sources/MeiliSearch/Indexes.swift b/Sources/MeiliSearch/Indexes.swift index d020590b..e075be00 100755 --- a/Sources/MeiliSearch/Indexes.swift +++ b/Sources/MeiliSearch/Indexes.swift @@ -515,7 +515,7 @@ public struct Indexes { */ public func getTask( taskUid: Int, - _ completion: @escaping (Result) -> Void) { + _ completion: @escaping (Result) -> Void) { self.tasks.get(taskUid: taskUid, completion) } diff --git a/Sources/MeiliSearch/Model/Task/Task.swift b/Sources/MeiliSearch/Model/Task/Task.swift index 8cadacb1..3d1f152f 100644 --- a/Sources/MeiliSearch/Model/Task/Task.swift +++ b/Sources/MeiliSearch/Model/Task/Task.swift @@ -4,7 +4,7 @@ import Foundation `Task` instances represent the current transaction status, use the `uid` value to verify the status of your transaction. */ -public struct Task: Decodable, Equatable { +public struct MTask: Decodable, Equatable { /// Unique ID for the current `Task`. public let uid: Int diff --git a/Sources/MeiliSearch/Model/Task/TaskDetails.swift b/Sources/MeiliSearch/Model/Task/TaskDetails.swift index b4d8a6c5..413edff2 100644 --- a/Sources/MeiliSearch/Model/Task/TaskDetails.swift +++ b/Sources/MeiliSearch/Model/Task/TaskDetails.swift @@ -1,6 +1,6 @@ import Foundation -public extension Task { +public extension MTask { enum Details: Equatable { case indexCreation(TaskIndexCreationDetails) case indexUpdate(TaskIndexUpdateDetails) diff --git a/Sources/MeiliSearch/Model/Task/TaskInfo.swift b/Sources/MeiliSearch/Model/Task/TaskInfo.swift index 05861e89..ff8bc455 100644 --- a/Sources/MeiliSearch/Model/Task/TaskInfo.swift +++ b/Sources/MeiliSearch/Model/Task/TaskInfo.swift @@ -12,7 +12,7 @@ public struct TaskInfo: Codable, Equatable { public let indexUid: String? /// Returns if the task has been successful or not. - public let status: Task.Status + public let status: MTask.Status /// Type of the task. public let type: TaskType @@ -26,7 +26,7 @@ public struct TaskInfo: Codable, Equatable { @discardableResult @available(macOS 10.15, iOS 13, tvOS 13, watchOS 6, *) - public func wait(on client: MeiliSearch, options: WaitOptions? = nil) async throws -> Task { + public func wait(on client: MeiliSearch, options: WaitOptions? = nil) async throws -> MTask { try await client.waitForTask(task: self, options: options) } } diff --git a/Sources/MeiliSearch/Model/Task/TaskStatus.swift b/Sources/MeiliSearch/Model/Task/TaskStatus.swift index b55f2dc3..fc7b2553 100644 --- a/Sources/MeiliSearch/Model/Task/TaskStatus.swift +++ b/Sources/MeiliSearch/Model/Task/TaskStatus.swift @@ -1,6 +1,6 @@ import Foundation -public extension Task { +public extension MTask { enum Status: String, Codable, Equatable { /// When a task was successfully enqueued and is waiting to be processed. case enqueued diff --git a/Sources/MeiliSearch/Model/Task/TasksResults.swift b/Sources/MeiliSearch/Model/Task/TasksResults.swift index 64e039b2..6d699dcd 100644 --- a/Sources/MeiliSearch/Model/Task/TasksResults.swift +++ b/Sources/MeiliSearch/Model/Task/TasksResults.swift @@ -5,7 +5,7 @@ import Foundation */ public struct TasksResults: Decodable, Equatable { /// Results list containing objects of `Task`. - public let results: [Task] + public let results: [MTask] /// Integer value used to retrieve the next batch of tasks. public let next: Int? /// Integer value representing the first `uid` of the first task returned. diff --git a/Sources/MeiliSearch/QueryParameters/CancelTasksQuery.swift b/Sources/MeiliSearch/QueryParameters/CancelTasksQuery.swift index 4cef573c..4ab062dd 100644 --- a/Sources/MeiliSearch/QueryParameters/CancelTasksQuery.swift +++ b/Sources/MeiliSearch/QueryParameters/CancelTasksQuery.swift @@ -7,7 +7,7 @@ public class CancelTasksQuery: Queryable { /// List of strings with all the types the response should contain. public let types: [TaskType] /// List of strings with all the statuses the response should contain. - public let statuses: [Task.Status] + public let statuses: [MTask.Status] /// Filter tasks response by a particular list of index Uids strings public let indexUids: [String] /// Filter tasks based on a list of task's uids. @@ -22,7 +22,7 @@ public class CancelTasksQuery: Queryable { public let afterStartedAt: Date? init( - types: [TaskType]? = nil, statuses: [Task.Status]? = nil, + types: [TaskType]? = nil, statuses: [MTask.Status]? = nil, indexUids: [String]? = nil, uids: [Int]? = nil, beforeEnqueuedAt: Date? = nil, afterEnqueuedAt: Date? = nil, beforeStartedAt: Date? = nil, afterStartedAt: Date? = nil diff --git a/Sources/MeiliSearch/QueryParameters/DeleteTasksQuery.swift b/Sources/MeiliSearch/QueryParameters/DeleteTasksQuery.swift index b720bc06..c7137f66 100644 --- a/Sources/MeiliSearch/QueryParameters/DeleteTasksQuery.swift +++ b/Sources/MeiliSearch/QueryParameters/DeleteTasksQuery.swift @@ -7,7 +7,7 @@ public class DeleteTasksQuery: Queryable { /// List of strings with all the types the response should contain. public let types: [TaskType] /// List of strings with all the statuses the response should contain. - public let statuses: [Task.Status] + public let statuses: [MTask.Status] /// Filter tasks response by a particular list of index Uids strings public let indexUids: [String] /// Filter tasks based on a list of task's uids. @@ -28,7 +28,7 @@ public class DeleteTasksQuery: Queryable { public let afterFinishedAt: Date? init( - statuses: [Task.Status]? = nil, types: [TaskType]? = nil, + statuses: [MTask.Status]? = nil, types: [TaskType]? = nil, indexUids: [String]? = nil, uids: [Int]? = nil, canceledBy: [Int]? = nil, beforeEnqueuedAt: Date? = nil, afterEnqueuedAt: Date? = nil, beforeStartedAt: Date? = nil, afterStartedAt: Date? = nil, diff --git a/Sources/MeiliSearch/QueryParameters/TasksQuery.swift b/Sources/MeiliSearch/QueryParameters/TasksQuery.swift index d8eda862..5a9241e4 100644 --- a/Sources/MeiliSearch/QueryParameters/TasksQuery.swift +++ b/Sources/MeiliSearch/QueryParameters/TasksQuery.swift @@ -15,7 +15,7 @@ public class TasksQuery: Queryable { /// List of strings with all the types the response should contain. private var types: [TaskType] /// List of strings with all the statuses the response should contain. - private var statuses: [Task.Status] + private var statuses: [MTask.Status] /// Filter tasks response by a particular list of index Uids strings var indexUids: [String] /// Filter tasks based on a list of task's uids. @@ -37,7 +37,7 @@ public class TasksQuery: Queryable { init( limit: Int? = nil, from: Int? = nil, next: Int? = nil, - statuses: [Task.Status]? = nil, types: [TaskType]? = nil, + statuses: [MTask.Status]? = nil, types: [TaskType]? = nil, indexUids: [String]? = nil, uids: [Int]? = nil, canceledBy: [Int]? = nil, beforeEnqueuedAt: Date? = nil, afterEnqueuedAt: Date? = nil, afterFinishedAt: Date? = nil, beforeStartedAt: Date? = nil, diff --git a/Sources/MeiliSearch/Tasks.swift b/Sources/MeiliSearch/Tasks.swift index 624884c9..ac947817 100644 --- a/Sources/MeiliSearch/Tasks.swift +++ b/Sources/MeiliSearch/Tasks.swift @@ -20,18 +20,18 @@ struct Tasks { // Get on client func get( taskUid: Int, - _ completion: @escaping (Result) -> Void) { + _ completion: @escaping (Result) -> Void) { get(path: "/tasks/\(taskUid)", completion) } private func get ( path: String, - _ completion: @escaping (Result) -> Void) { + _ completion: @escaping (Result) -> Void) { self.request.get(api: path) { result in switch result { case .success(let data): do { - let task: Result = try Constants.resultDecoder(data: data) + let task: Result = try Constants.resultDecoder(data: data) completion(task) } catch { completion(.failure(error)) @@ -90,11 +90,11 @@ struct Tasks { _ taskUid: Int, _ options: WaitOptions, _ startingDate: Date, - _ completion: @escaping (Result) -> Void) { + _ completion: @escaping (Result) -> Void) { self.get(taskUid: taskUid) { result in switch result { case .success(let status): - if status.status == Task.Status.succeeded || status.status == Task.Status.failed { + if status.status == MTask.Status.succeeded || status.status == MTask.Status.failed { completion(.success(status)) } else if 0 - startingDate.timeIntervalSinceNow > options.timeOut { completion(.failure(MeiliSearch.Error.timeOut(timeOut: options.timeOut))) @@ -111,9 +111,9 @@ struct Tasks { // wait for task using task structure func waitForTask( - task: Task, + task: MTask, options: WaitOptions? = nil, - _ completion: @escaping (Result) -> Void) { + _ completion: @escaping (Result) -> Void) { waitForTask(taskUid: task.uid, options: options, completion) } @@ -121,7 +121,7 @@ struct Tasks { func waitForTask( taskUid: Int, options: WaitOptions? = nil, - _ completion: @escaping (Result) -> Void) { + _ completion: @escaping (Result) -> Void) { do { let currentDate = Date() let waitOptions = options ?? WaitOptions() diff --git a/Tests/MeiliSearchIntegrationTests/DocumentsTests.swift b/Tests/MeiliSearchIntegrationTests/DocumentsTests.swift index ff95cb18..188018f0 100755 --- a/Tests/MeiliSearchIntegrationTests/DocumentsTests.swift +++ b/Tests/MeiliSearchIntegrationTests/DocumentsTests.swift @@ -64,7 +64,7 @@ class DocumentsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("documentAdditionOrUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .documentAdditionOrUpdate(let details) = task.details { XCTAssertEqual(8, details.indexedDocuments) XCTAssertEqual(8, details.receivedDocuments) @@ -99,7 +99,7 @@ class DocumentsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("documentAdditionOrUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -129,7 +129,7 @@ class DocumentsTests: XCTestCase { self.client.waitForTask(task: task) { result in switch result { case .success(let task): - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) XCTAssertEqual("documentAdditionOrUpdate", task.type.description) self.index.getDocuments(params: DocumentsQuery(limit: 1, offset: 1, fields: ["id", "title"])) { (result: Result, Swift.Error>) in @@ -190,7 +190,7 @@ class DocumentsTests: XCTestCase { self.client.waitForTask(task: task) { result in switch result { case .success(let task): - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) XCTAssertEqual("documentAdditionOrUpdate", task.type.description) self.index.getDocument(10 ) { (result: Result) in @@ -233,7 +233,7 @@ class DocumentsTests: XCTestCase { self.client.waitForTask(task: task) { result in switch result { case .success(let task): - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) XCTAssertEqual("documentAdditionOrUpdate", task.type.description) self.index.getDocument("10" ) { (result: Result) in @@ -278,7 +278,7 @@ class DocumentsTests: XCTestCase { self.client.waitForTask(task: task) { result in switch result { case .success(let task): - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) XCTAssertEqual("documentAdditionOrUpdate", task.type.description) expectation.fulfill() case .failure: @@ -321,7 +321,7 @@ class DocumentsTests: XCTestCase { self.client.waitForTask(taskUid: task.taskUid) { result in switch result { case .success(let task): - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) XCTAssertEqual("documentDeletion", task.type.description) deleteExpectation.fulfill() case .failure: @@ -363,7 +363,7 @@ class DocumentsTests: XCTestCase { self.client.waitForTask(task: task) { result in switch result { case .success(let task): - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) XCTAssertEqual("documentDeletion", task.type.description) if case .documentDeletion(let details) = task.details { // It's possible for this to number to be greater than 8 (the number of documents we have inserted) due @@ -415,7 +415,7 @@ class DocumentsTests: XCTestCase { self.client.waitForTask(task: task) { result in switch result { case .success(let task): - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) XCTAssertEqual("documentDeletion", task.type.description) deleteExpectation.fulfill() case .failure: @@ -460,7 +460,7 @@ class DocumentsTests: XCTestCase { self.client.waitForTask(task: task) { result in switch result { case .success(let task): - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) XCTAssertEqual("documentDeletion", task.type.description) deleteExpectation.fulfill() case .failure: diff --git a/Tests/MeiliSearchIntegrationTests/DumpsTests.swift b/Tests/MeiliSearchIntegrationTests/DumpsTests.swift index fc5db922..e47967b5 100644 --- a/Tests/MeiliSearchIntegrationTests/DumpsTests.swift +++ b/Tests/MeiliSearchIntegrationTests/DumpsTests.swift @@ -25,7 +25,7 @@ class DumpsTests: XCTestCase { self.client.createDump { result in switch result { case .success(let dumpTask): - XCTAssertEqual(dumpTask.status, Task.Status.enqueued) + XCTAssertEqual(dumpTask.status, MTask.Status.enqueued) expectation.fulfill() case .failure(let error): dump(error) diff --git a/Tests/MeiliSearchIntegrationTests/IndexesTests.swift b/Tests/MeiliSearchIntegrationTests/IndexesTests.swift index 47ed1195..21bd88b3 100644 --- a/Tests/MeiliSearchIntegrationTests/IndexesTests.swift +++ b/Tests/MeiliSearchIntegrationTests/IndexesTests.swift @@ -57,7 +57,7 @@ class IndexesTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("indexCreation", task.type.description) - XCTAssertEqual(task.status, Task.Status.succeeded) + XCTAssertEqual(task.status, MTask.Status.succeeded) createExpectation.fulfill() case .failure(let error): dump(error) @@ -93,7 +93,7 @@ class IndexesTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("indexCreation", task.type.description) - XCTAssertEqual(task.status, Task.Status.succeeded) + XCTAssertEqual(task.status, MTask.Status.succeeded) createExpectation.fulfill() case .failure(let error): dump(error) @@ -111,7 +111,7 @@ class IndexesTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("indexCreation", task.type.description) - XCTAssertEqual(task.status, Task.Status.failed) + XCTAssertEqual(task.status, MTask.Status.failed) if let error = task.error { XCTAssertEqual(error.code, "index_already_exists") } else { @@ -221,7 +221,7 @@ class IndexesTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("indexUpdate", task.type.description) - XCTAssertEqual(task.status, Task.Status.succeeded) + XCTAssertEqual(task.status, MTask.Status.succeeded) if case .indexUpdate(let details) = task.details, let primaryKey = details.primaryKey { XCTAssertEqual("random", primaryKey) } else { @@ -307,7 +307,7 @@ class IndexesTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("indexDeletion", task.type.description) - XCTAssertEqual(task.status, Task.Status.succeeded) + XCTAssertEqual(task.status, MTask.Status.succeeded) deleteException.fulfill() case .failure(let error): dump(error) diff --git a/Tests/MeiliSearchIntegrationTests/SettingsTests.swift b/Tests/MeiliSearchIntegrationTests/SettingsTests.swift index 00d749cb..1a4d02ff 100644 --- a/Tests/MeiliSearchIntegrationTests/SettingsTests.swift +++ b/Tests/MeiliSearchIntegrationTests/SettingsTests.swift @@ -132,7 +132,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newFilterableAttributes, details.filterableAttributes) } else { @@ -165,7 +165,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -214,7 +214,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newDisplayedAttributes, details.displayedAttributes) } else { @@ -247,7 +247,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -295,7 +295,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newDistinctAttribute, details.distinctAttribute) } else { @@ -327,7 +327,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -381,7 +381,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newRankingRules, details.rankingRules) } else { @@ -414,7 +414,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -467,7 +467,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newSearchableAttributes, details.searchableAttributes) } else { @@ -500,7 +500,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -557,7 +557,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newTypoTolerance, details.typoTolerance) } else { @@ -590,7 +590,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -644,7 +644,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newSeparatorTokens, details.separatorTokens) } else { @@ -677,7 +677,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -731,7 +731,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newNonSeparatorTokens, details.nonSeparatorTokens) } else { @@ -764,7 +764,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -818,7 +818,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newDictionary.sorted(), details.dictionary?.sorted()) } else { @@ -851,7 +851,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -901,7 +901,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newPaginationSettings, details.pagination) } else { @@ -934,7 +934,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -984,7 +984,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newStopWords, details.stopWords) } else { @@ -1018,7 +1018,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(emptyStopWords, details.stopWords) } else { @@ -1052,7 +1052,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(nilStopWords, details.stopWords) } else { @@ -1085,7 +1085,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -1140,7 +1140,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newSynonyms, details.synonyms) } else { @@ -1174,7 +1174,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newSynonyms, details.synonyms) } else { @@ -1209,7 +1209,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(newSynonyms, details.synonyms) } else { @@ -1242,7 +1242,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) @@ -1315,7 +1315,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(expectedSettingResult.rankingRules, details.rankingRules) XCTAssertEqual(expectedSettingResult.searchableAttributes, details.searchableAttributes) @@ -1348,7 +1348,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(expectedSettingResult.rankingRules, details.rankingRules) } else { @@ -1412,7 +1412,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) if case .settingsUpdate(let details) = task.details { XCTAssertEqual(expectedSettingResult.rankingRules, details.rankingRules) XCTAssertEqual(expectedSettingResult.searchableAttributes, details.searchableAttributes) @@ -1454,7 +1454,7 @@ class SettingsTests: XCTestCase { switch result { case .success(let task): XCTAssertEqual("settingsUpdate", task.type.description) - XCTAssertEqual(Task.Status.succeeded, task.status) + XCTAssertEqual(MTask.Status.succeeded, task.status) expectation.fulfill() case .failure(let error): dump(error) diff --git a/Tests/MeiliSearchIntegrationTests/Utils.swift b/Tests/MeiliSearchIntegrationTests/Utils.swift index 8e780f8a..1190c0fc 100644 --- a/Tests/MeiliSearchIntegrationTests/Utils.swift +++ b/Tests/MeiliSearchIntegrationTests/Utils.swift @@ -25,13 +25,13 @@ public func currentHost() -> String { public func waitForTask( _ client: MeiliSearch, _ uid: String, - _ task: Task, - _ completion: @escaping (Result) -> Void) { + _ task: MTask, + _ completion: @escaping (Result) -> Void) { func request() { client.index(uid).getTask(taskUid: task.uid) { result in switch result { case .success(let taskRes): - if taskRes.status == Task.Status.succeeded || taskRes.status == Task.Status.failed { + if taskRes.status == MTask.Status.succeeded || taskRes.status == MTask.Status.failed { completion(.success(taskRes)) return } @@ -46,7 +46,7 @@ public func waitForTask( request() } -public func createGenericIndex(client: MeiliSearch, uid: String, _ completion: @escaping(Result) -> Void) { +public func createGenericIndex(client: MeiliSearch, uid: String, _ completion: @escaping(Result) -> Void) { client.deleteIndex(uid) { result in switch result { case .success: @@ -71,7 +71,7 @@ public func createGenericIndex(client: MeiliSearch, uid: String, _ completion: @ } } -public func deleteIndex(client: MeiliSearch, uid: String, _ completion: @escaping(Result) -> Void) { +public func deleteIndex(client: MeiliSearch, uid: String, _ completion: @escaping(Result) -> Void) { client.deleteIndex(uid) { result in switch result { case .success(let task): @@ -90,12 +90,12 @@ public func deleteIndex(client: MeiliSearch, uid: String, _ completion: @escapin } } -public func addDocuments(client: MeiliSearch, uid: String, primaryKey: String?, _ completion: @escaping(Result) -> Void) { +public func addDocuments(client: MeiliSearch, uid: String, primaryKey: String?, _ completion: @escaping(Result) -> Void) { let movie = Movie(id: 1, title: "test", comment: "test movie") addDocuments(client: client, uid: uid, dataset: [movie], primaryKey: primaryKey, completion) } -public func addDocuments(client: MeiliSearch, uid: String, dataset: [T], primaryKey: String?, _ completion: @escaping(Result) -> Void) { +public func addDocuments(client: MeiliSearch, uid: String, dataset: [T], primaryKey: String?, _ completion: @escaping(Result) -> Void) { let jsonEncoder = JSONEncoder() let documents: Data From 5abd6c9e03f091ae415419cff130fa488c89e65b Mon Sep 17 00:00:00 2001 From: MiaKoring <143010553+MiaKoring@users.noreply.github.com> Date: Mon, 9 Dec 2024 12:33:18 +0100 Subject: [PATCH 2/5] added key actions enum --- Sources/MeiliSearch/Model/Key.swift | 8 + Sources/MeiliSearch/Model/KeyAction.swift | 189 ++++++++++++++++++ Sources/MeiliSearch/Model/KeyParams.swift | 22 ++ .../KeysTests.swift | 48 +++++ .../MeiliSearchUnitTests/KeyParamsTests.swift | 10 + Tests/MeiliSearchUnitTests/KeysTests.swift | 14 ++ 6 files changed, 291 insertions(+) create mode 100644 Sources/MeiliSearch/Model/KeyAction.swift diff --git a/Sources/MeiliSearch/Model/Key.swift b/Sources/MeiliSearch/Model/Key.swift index ea3bbcb4..38035ae5 100644 --- a/Sources/MeiliSearch/Model/Key.swift +++ b/Sources/MeiliSearch/Model/Key.swift @@ -29,3 +29,11 @@ public struct Key: Codable, Equatable { /// Date and time when the key was last updated, represented in RFC 3339 format. public let updatedAt: String } + +public extension Key { + var enumActions: [KeyAction] { + self.actions.map { action in + KeyAction(action) + } + } +} diff --git a/Sources/MeiliSearch/Model/KeyAction.swift b/Sources/MeiliSearch/Model/KeyAction.swift new file mode 100644 index 00000000..deaea7d6 --- /dev/null +++ b/Sources/MeiliSearch/Model/KeyAction.swift @@ -0,0 +1,189 @@ +///Documentation: https://www.meilisearch.com/docs/reference/api/keys#actions +public enum KeyAction: Equatable { + case wildcard + case search + case documentsWildcard + case documentsAdd + case documentsGet + case documentsDelete + case indexesWildcard + case indexesCreate + case indexesGet + case indexesUpdate + case indexesDelete + case indexesSwap + case tasksWildcard + case tasksGet + case tasksCancel + case tasksDelete + case settingsWildcard + case settingsGet + case settingsUpdate + case statsGet + case dumpsCreate + case snapshotsCreate + case version + case keysGet + case keysCreate + case keysUpdate + case keysDelete + case unknown(String) +} + +public extension KeyAction { + init(_ value: String) { + self = switch value { + case "*": + .wildcard + case "search": + .search + case "documents.*": + .documentsWildcard + case "documents.add": + .documentsAdd + case "documents.get": + .documentsGet + case "documents.delete": + .documentsDelete + case "indexes.*": + .indexesWildcard + case "indexes.create": + .indexesCreate + case "indexes.get": + .indexesGet + case "indexes.update": + .indexesUpdate + case "indexes.delete": + .indexesDelete + case "indexes.swap": + .indexesSwap + case "tasks.*": + .tasksWildcard + case "tasks.get": + .tasksGet + case "tasks.cancel": + .tasksCancel + case "tasks.delete": + .tasksDelete + case "settings.*": + .settingsWildcard + case "settings.get": + .settingsGet + case "settings.update": + .settingsUpdate + case "stats.get": + .statsGet + case "dumps.create": + .dumpsCreate + case "snapshots.create": + .snapshotsCreate + case "version": + .version + case "keys.get": + .keysGet + case "keys.create": + .keysCreate + case "keys.update": + .keysUpdate + case "keys.delete": + .keysDelete + default: + .unknown(value) + } + } + + var value: String { + switch self { + case .wildcard: + "*" + case .search: + "search" + case .documentsWildcard: + "documents.*" + case .documentsAdd: + "documents.add" + case .documentsGet: + "documents.get" + case .documentsDelete: + "documents.delete" + case .indexesWildcard: + "indexes.*" + case .indexesCreate: + "indexes.create" + case .indexesGet: + "indexes.get" + case .indexesUpdate: + "indexes.update" + case .indexesDelete: + "indexes.delete" + case .indexesSwap: + "indexes.swap" + case .tasksWildcard: + "tasks.*" + case .tasksGet: + "tasks.get" + case .tasksCancel: + "tasks.cancel" + case .tasksDelete: + "tasks.delete" + case .settingsWildcard: + "settings.*" + case .settingsGet: + "settings.get" + case .settingsUpdate: + "settings.update" + case .statsGet: + "stats.get" + case .dumpsCreate: + "dumps.create" + case .snapshotsCreate: + "snapshots.create" + case .version: + "version" + case .keysGet: + "keys.get" + case .keysCreate: + "keys.create" + case .keysUpdate: + "keys.update" + case .keysDelete: + "keys.delete" + case .unknown(let string): + string + } + } +} + +extension KeyAction: CaseIterable { + public static var allCases: [KeyAction] { + [ + .wildcard, + .search, + .documentsWildcard, + .documentsAdd, + .documentsGet, + .documentsDelete, + .indexesWildcard, + .indexesCreate, + .indexesGet, + .indexesUpdate, + .indexesDelete, + .indexesSwap, + .tasksWildcard, + .tasksGet, + .tasksCancel, + .tasksDelete, + .settingsWildcard, + .settingsGet, + .settingsUpdate, + .statsGet, + .dumpsCreate, + .snapshotsCreate, + .version, + .keysGet, + .keysCreate, + .keysUpdate, + .keysDelete, + ] + } +} diff --git a/Sources/MeiliSearch/Model/KeyParams.swift b/Sources/MeiliSearch/Model/KeyParams.swift index 5afc3896..166b2755 100644 --- a/Sources/MeiliSearch/Model/KeyParams.swift +++ b/Sources/MeiliSearch/Model/KeyParams.swift @@ -35,6 +35,22 @@ public struct KeyParams: Codable, Equatable { self.indexes = indexes self.expiresAt = expiresAt } + + public init( + description: String? = nil, + name: String? = nil, + uid: String? = nil, + actions: [KeyAction], + indexes: [String], + expiresAt: String? + ) { + self.description = description + self.name = name + self.uid = uid + self.actions = actions.map { $0.value } + self.indexes = indexes + self.expiresAt = expiresAt + } public func encode(to encoder: Encoder) throws { var container = encoder.container(keyedBy: CodingKeys.self) @@ -67,3 +83,9 @@ public struct KeyUpdateParams: Codable, Equatable { } } } + +public extension KeyParams { + var enumActions: [KeyAction] { + self.actions.map { KeyAction($0) } + } +} diff --git a/Tests/MeiliSearchIntegrationTests/KeysTests.swift b/Tests/MeiliSearchIntegrationTests/KeysTests.swift index c2e301b7..8ba735f7 100644 --- a/Tests/MeiliSearchIntegrationTests/KeysTests.swift +++ b/Tests/MeiliSearchIntegrationTests/KeysTests.swift @@ -171,6 +171,54 @@ class KeysTests: XCTestCase { } self.wait(for: [keyExpectation], timeout: TESTS_TIME_OUT) } + + //is expected to fail + func testCreateKeyWithEnumCase() { + let keyExpectation = XCTestExpectation(description: "Create a key") + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + let someDateTime = formatter.string(from: Date.distantFuture) + + let keyParams = KeyParams(description: "Custom", actions: KeyAction.allCases, indexes: ["*"], expiresAt: someDateTime) + self.client.createKey(keyParams) { result in + switch result { + case .success(let key): + XCTAssertEqual(key.description, keyParams.description) + XCTAssertEqual(key.actions, keyParams.actions) + XCTAssertEqual(key.enumActions, keyParams.enumActions) + XCTAssertEqual(key.indexes, keyParams.indexes) + XCTAssertNotNil(key.expiresAt) + keyExpectation.fulfill() + case .failure(let error): + print(error.localizedDescription) + dump(error) + XCTFail("Failed to create a key") + keyExpectation.fulfill() + } + } + self.wait(for: [keyExpectation], timeout: TESTS_TIME_OUT) + } + + //is expected to fail + func testCreateKeyWithUnsupportedEnumCase() { + let keyExpectation = XCTestExpectation(description: "Create a key") + let formatter = DateFormatter() + formatter.dateFormat = "yyyy-MM-dd" + let someDateTime = formatter.string(from: Date.distantFuture) + + let keyParams = KeyParams(description: "Custom", actions: [.unknown("anyUnknownValue")], indexes: ["*"], expiresAt: someDateTime) + self.client.createKey(keyParams) { result in + switch result { + case .success: + XCTFail("should have failed") + case .failure(let error): + XCTAssertTrue(error.localizedDescription.contains("Unknown value `anyUnknownValue` at `.actions[0]`:")) + dump(error) + keyExpectation.fulfill() + } + } + self.wait(for: [keyExpectation], timeout: TESTS_TIME_OUT) + } func testUpdateKey() { let keyExpectation = XCTestExpectation(description: "Update a key") diff --git a/Tests/MeiliSearchUnitTests/KeyParamsTests.swift b/Tests/MeiliSearchUnitTests/KeyParamsTests.swift index 2b07a691..3ccb4644 100644 --- a/Tests/MeiliSearchUnitTests/KeyParamsTests.swift +++ b/Tests/MeiliSearchUnitTests/KeyParamsTests.swift @@ -31,4 +31,14 @@ class KeyParamsTests: XCTestCase { XCTAssertNil(keyParams.name) XCTAssertNil(keyParams.uid) } + + func testEnumInitializer() { + let keyParams = KeyParams(actions: [.unknown("action1")], indexes: ["index1"], expiresAt: nil) + XCTAssertEqual(keyParams.actions, ["action1"]) + XCTAssertEqual(keyParams.indexes, ["index1"]) + XCTAssertNil(keyParams.expiresAt) + XCTAssertNil(keyParams.description) + XCTAssertNil(keyParams.name) + XCTAssertNil(keyParams.uid) + } } diff --git a/Tests/MeiliSearchUnitTests/KeysTests.swift b/Tests/MeiliSearchUnitTests/KeysTests.swift index 83df748f..4f7ba44d 100644 --- a/Tests/MeiliSearchUnitTests/KeysTests.swift +++ b/Tests/MeiliSearchUnitTests/KeysTests.swift @@ -31,4 +31,18 @@ class KeysTests: XCTestCase { let requestQuery = self.session.nextDataTask.request?.url?.query XCTAssertEqual(requestQuery, "limit=2&offset=10") } + + func testEnumActions() { + let key = Key(uid: "uid", + name: "name", + description: "some description", + key: "any", + actions: ["documents.add", "any-nonsupported-value"], + indexes: ["index1"], + expiresAt: nil, + createdAt: "2021-08-11T10:00:00Z", + updatedAt: "2021-08-11T10:00:00Z") + + XCTAssertEqual(key.enumActions, [.documentsAdd, .unknown("any-nonsupported-value")]) + } } From 3292a9a99d6adc36b9cd1fde470d40f2eec60a7e Mon Sep 17 00:00:00 2001 From: MiaKoring <143010553+MiaKoring@users.noreply.github.com> Date: Fri, 13 Dec 2024 12:51:03 +0100 Subject: [PATCH 3/5] Breaking: replaced String value of KeyAction with Enum + removed keyExpection and comment of KeyTest with unsupported action tests passing --- Sources/MeiliSearch/Model/Key.swift | 9 +------ Sources/MeiliSearch/Model/KeyAction.swift | 15 ++++++++++- Sources/MeiliSearch/Model/KeyParams.swift | 26 ++----------------- .../KeysTests.swift | 20 ++++++-------- .../MeiliSearchUnitTests/KeyParamsTests.swift | 10 +++---- Tests/MeiliSearchUnitTests/KeysTests.swift | 4 +-- 6 files changed, 32 insertions(+), 52 deletions(-) diff --git a/Sources/MeiliSearch/Model/Key.swift b/Sources/MeiliSearch/Model/Key.swift index 38035ae5..bfc4f4a8 100644 --- a/Sources/MeiliSearch/Model/Key.swift +++ b/Sources/MeiliSearch/Model/Key.swift @@ -19,7 +19,7 @@ public struct Key: Codable, Equatable { /// An alphanumeric key value generated by Meilisearch by hashing the uid and the master key on API key creation. public let key: String /// An array of API actions permitted for the key. - public let actions: [String] + public let actions: [KeyAction] /// An array of strings (indexes names) the key is authorized to act on. public let indexes: [String] /// Date and time when the key will expire, represented in RFC 3339 format. @@ -30,10 +30,3 @@ public struct Key: Codable, Equatable { public let updatedAt: String } -public extension Key { - var enumActions: [KeyAction] { - self.actions.map { action in - KeyAction(action) - } - } -} diff --git a/Sources/MeiliSearch/Model/KeyAction.swift b/Sources/MeiliSearch/Model/KeyAction.swift index deaea7d6..dfe31b7f 100644 --- a/Sources/MeiliSearch/Model/KeyAction.swift +++ b/Sources/MeiliSearch/Model/KeyAction.swift @@ -1,5 +1,5 @@ ///Documentation: https://www.meilisearch.com/docs/reference/api/keys#actions -public enum KeyAction: Equatable { +public enum KeyAction: Equatable, Codable { case wildcard case search case documentsWildcard @@ -28,6 +28,19 @@ public enum KeyAction: Equatable { case keysUpdate case keysDelete case unknown(String) + + public init(from decoder: Decoder) throws { + let container = try decoder.singleValueContainer() + let rawValue = try container.decode(String.self) + + self = KeyAction(rawValue) + } + + public func encode(to encoder: Encoder) throws { + var container = encoder.singleValueContainer() + + try container.encode(self.value) + } } public extension KeyAction { diff --git a/Sources/MeiliSearch/Model/KeyParams.swift b/Sources/MeiliSearch/Model/KeyParams.swift index 166b2755..4190d8ff 100644 --- a/Sources/MeiliSearch/Model/KeyParams.swift +++ b/Sources/MeiliSearch/Model/KeyParams.swift @@ -14,28 +14,12 @@ public struct KeyParams: Codable, Equatable { /// A uuid v4 to identify the API key. If not specified, it is automatically generated by Meilisearch. public var uid: String? /// An array of API actions permitted for the key. - public let actions: [String] + public let actions: [KeyAction] /// An array of strings (indexes names) the key is authorized to act on. public let indexes: [String] /// Date and time when the key will expire, represented in RFC 3339 format. public let expiresAt: String? - public init( - description: String? = nil, - name: String? = nil, - uid: String? = nil, - actions: [String], - indexes: [String], - expiresAt: String? - ) { - self.description = description - self.name = name - self.uid = uid - self.actions = actions - self.indexes = indexes - self.expiresAt = expiresAt - } - public init( description: String? = nil, name: String? = nil, @@ -47,7 +31,7 @@ public struct KeyParams: Codable, Equatable { self.description = description self.name = name self.uid = uid - self.actions = actions.map { $0.value } + self.actions = actions self.indexes = indexes self.expiresAt = expiresAt } @@ -83,9 +67,3 @@ public struct KeyUpdateParams: Codable, Equatable { } } } - -public extension KeyParams { - var enumActions: [KeyAction] { - self.actions.map { KeyAction($0) } - } -} diff --git a/Tests/MeiliSearchIntegrationTests/KeysTests.swift b/Tests/MeiliSearchIntegrationTests/KeysTests.swift index 8ba735f7..85392928 100644 --- a/Tests/MeiliSearchIntegrationTests/KeysTests.swift +++ b/Tests/MeiliSearchIntegrationTests/KeysTests.swift @@ -47,7 +47,7 @@ class KeysTests: XCTestCase { func testGetKeys() { let keyExpectation = XCTestExpectation(description: "Get a list of keys") - self.client.createKey(KeyParams(actions: ["*"], indexes: ["*"], expiresAt: nil)) { result in + self.client.createKey(KeyParams(actions: [.wildcard], indexes: ["*"], expiresAt: nil)) { result in switch result { case .success: self.client.getKeys { result in @@ -74,7 +74,7 @@ class KeysTests: XCTestCase { func testGetKey() { let keyExpectation = XCTestExpectation(description: "Get one key") - self.client.createKey(KeyParams(actions: ["*"], indexes: ["*"], expiresAt: nil)) { result in + self.client.createKey(KeyParams(actions: [.wildcard], indexes: ["*"], expiresAt: nil)) { result in switch result { case .success(let createdKey): self.client.getKey(keyOrUid: createdKey.uid) { result in @@ -105,7 +105,7 @@ class KeysTests: XCTestCase { func testCreateKey() { let keyExpectation = XCTestExpectation(description: "Create a key") - let keyParams = KeyParams(description: "Custom", actions: ["*"], indexes: ["*"], expiresAt: nil) + let keyParams = KeyParams(description: "Custom", actions: [.wildcard], indexes: ["*"], expiresAt: nil) self.client.createKey(keyParams) { result in switch result { case .success(let key): @@ -127,7 +127,7 @@ class KeysTests: XCTestCase { func testCreateKeyWithOptionalUid() { let keyExpectation = XCTestExpectation(description: "Create a key") let uid = UUID().uuidString.lowercased() - let keyParams = KeyParams(uid: uid, actions: ["*"], indexes: ["*"], expiresAt: nil) + let keyParams = KeyParams(uid: uid, actions: [.wildcard], indexes: ["*"], expiresAt: nil) self.client.createKey(keyParams) { result in switch result { @@ -154,7 +154,7 @@ class KeysTests: XCTestCase { formatter.dateFormat = "yyyy-MM-dd" let someDateTime = formatter.string(from: Date.distantFuture) - let keyParams = KeyParams(description: "Custom", actions: ["*"], indexes: ["*"], expiresAt: someDateTime) + let keyParams = KeyParams(description: "Custom", actions: [.wildcard], indexes: ["*"], expiresAt: someDateTime) self.client.createKey(keyParams) { result in switch result { case .success(let key): @@ -185,7 +185,7 @@ class KeysTests: XCTestCase { case .success(let key): XCTAssertEqual(key.description, keyParams.description) XCTAssertEqual(key.actions, keyParams.actions) - XCTAssertEqual(key.enumActions, keyParams.enumActions) + XCTAssertEqual(key.actions, keyParams.actions) XCTAssertEqual(key.indexes, keyParams.indexes) XCTAssertNotNil(key.expiresAt) keyExpectation.fulfill() @@ -199,9 +199,7 @@ class KeysTests: XCTestCase { self.wait(for: [keyExpectation], timeout: TESTS_TIME_OUT) } - //is expected to fail func testCreateKeyWithUnsupportedEnumCase() { - let keyExpectation = XCTestExpectation(description: "Create a key") let formatter = DateFormatter() formatter.dateFormat = "yyyy-MM-dd" let someDateTime = formatter.string(from: Date.distantFuture) @@ -214,16 +212,14 @@ class KeysTests: XCTestCase { case .failure(let error): XCTAssertTrue(error.localizedDescription.contains("Unknown value `anyUnknownValue` at `.actions[0]`:")) dump(error) - keyExpectation.fulfill() } } - self.wait(for: [keyExpectation], timeout: TESTS_TIME_OUT) } func testUpdateKey() { let keyExpectation = XCTestExpectation(description: "Update a key") - let keyParams = KeyParams(description: "Custom", name: "old name", actions: ["*"], indexes: ["index"], expiresAt: nil) + let keyParams = KeyParams(description: "Custom", name: "old name", actions: [.wildcard], indexes: ["index"], expiresAt: nil) self.client.createKey(keyParams) { result in switch result { case .success(let key): @@ -254,7 +250,7 @@ class KeysTests: XCTestCase { func testDeleteKey() { let keyExpectation = XCTestExpectation(description: "Delete a key") - let keyParams = KeyParams(description: "Custom", actions: ["*"], indexes: ["*"], expiresAt: nil) + let keyParams = KeyParams(description: "Custom", actions: [.wildcard], indexes: ["*"], expiresAt: nil) self.client.createKey(keyParams) { result in switch result { case .success(let key): diff --git a/Tests/MeiliSearchUnitTests/KeyParamsTests.swift b/Tests/MeiliSearchUnitTests/KeyParamsTests.swift index 3ccb4644..3c9191df 100644 --- a/Tests/MeiliSearchUnitTests/KeyParamsTests.swift +++ b/Tests/MeiliSearchUnitTests/KeyParamsTests.swift @@ -8,12 +8,12 @@ class KeyParamsTests: XCTestCase { description: "The default search key", name: "Default Search Key", uid: "74c9c733-3368-4738-bbe5-1d18a5fecb37", - actions: ["action1"], + actions: [.documentsAdd], indexes: ["index1"], expiresAt: "2021-08-11T10:00:00Z" ) - XCTAssertEqual(keyParams.actions, ["action1"]) + XCTAssertEqual(keyParams.actions, [.documentsAdd]) XCTAssertEqual(keyParams.indexes, ["index1"]) XCTAssertEqual(keyParams.expiresAt, "2021-08-11T10:00:00Z") XCTAssertEqual(keyParams.description, "The default search key") @@ -22,9 +22,9 @@ class KeyParamsTests: XCTestCase { } func testCompactInitializer() { - let keyParams = KeyParams(actions: ["action1"], indexes: ["index1"], expiresAt: nil) + let keyParams = KeyParams(actions: [.documentsAdd], indexes: ["index1"], expiresAt: nil) - XCTAssertEqual(keyParams.actions, ["action1"]) + XCTAssertEqual(keyParams.actions, [.documentsAdd]) XCTAssertEqual(keyParams.indexes, ["index1"]) XCTAssertNil(keyParams.expiresAt) XCTAssertNil(keyParams.description) @@ -34,7 +34,7 @@ class KeyParamsTests: XCTestCase { func testEnumInitializer() { let keyParams = KeyParams(actions: [.unknown("action1")], indexes: ["index1"], expiresAt: nil) - XCTAssertEqual(keyParams.actions, ["action1"]) + XCTAssertEqual(keyParams.actions, [.unknown("action1")]) XCTAssertEqual(keyParams.indexes, ["index1"]) XCTAssertNil(keyParams.expiresAt) XCTAssertNil(keyParams.description) diff --git a/Tests/MeiliSearchUnitTests/KeysTests.swift b/Tests/MeiliSearchUnitTests/KeysTests.swift index 4f7ba44d..24048595 100644 --- a/Tests/MeiliSearchUnitTests/KeysTests.swift +++ b/Tests/MeiliSearchUnitTests/KeysTests.swift @@ -37,12 +37,12 @@ class KeysTests: XCTestCase { name: "name", description: "some description", key: "any", - actions: ["documents.add", "any-nonsupported-value"], + actions: [.documentsAdd, .unknown("unsupported")], indexes: ["index1"], expiresAt: nil, createdAt: "2021-08-11T10:00:00Z", updatedAt: "2021-08-11T10:00:00Z") - XCTAssertEqual(key.enumActions, [.documentsAdd, .unknown("any-nonsupported-value")]) + XCTAssertEqual(key.actions, [.documentsAdd, .unknown("unsupported")]) } } From 7f345ee480beb7706ad7eb6c16f8ce756a18e95d Mon Sep 17 00:00:00 2001 From: MiaKoring <143010553+MiaKoring@users.noreply.github.com> Date: Tue, 7 Jan 2025 17:19:46 +0100 Subject: [PATCH 4/5] Merged #461 --- Tests/MeiliSearchIntegrationTests/SnapshotsTests.swift | 2 +- Tests/MeiliSearchIntegrationTests/Utils.swift | 8 ++++---- docker-compose.yml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Tests/MeiliSearchIntegrationTests/SnapshotsTests.swift b/Tests/MeiliSearchIntegrationTests/SnapshotsTests.swift index 8a5a403c..d41a19ec 100644 --- a/Tests/MeiliSearchIntegrationTests/SnapshotsTests.swift +++ b/Tests/MeiliSearchIntegrationTests/SnapshotsTests.swift @@ -25,7 +25,7 @@ class SnapshotsTests: XCTestCase { self.client.createSnapshot { result in switch result { case .success(let snapshotTask): - XCTAssertEqual(snapshotTask.status, Task.Status.enqueued) + XCTAssertEqual(snapshotTask.status, MTask.Status.enqueued) expectation.fulfill() case .failure(let error): dump(error) diff --git a/Tests/MeiliSearchIntegrationTests/Utils.swift b/Tests/MeiliSearchIntegrationTests/Utils.swift index 835eb059..52f1e44c 100644 --- a/Tests/MeiliSearchIntegrationTests/Utils.swift +++ b/Tests/MeiliSearchIntegrationTests/Utils.swift @@ -46,7 +46,7 @@ public func waitForTask( request() } -public func createGenericIndex(client: MeiliSearch, uid: String, _ completion: @escaping (Result) -> Void) { +public func createGenericIndex(client: MeiliSearch, uid: String, _ completion: @escaping (Result) -> Void) { client.deleteIndex(uid) { result in switch result { case .success: @@ -71,7 +71,7 @@ public func createGenericIndex(client: MeiliSearch, uid: String, _ completion: @ } } -public func deleteIndex(client: MeiliSearch, uid: String, _ completion: @escaping (Result) -> Void) { +public func deleteIndex(client: MeiliSearch, uid: String, _ completion: @escaping (Result) -> Void) { client.deleteIndex(uid) { result in switch result { case .success(let task): @@ -90,12 +90,12 @@ public func deleteIndex(client: MeiliSearch, uid: String, _ completion: @escapin } } -public func addDocuments(client: MeiliSearch, uid: String, primaryKey: String?, _ completion: @escaping (Result) -> Void) { +public func addDocuments(client: MeiliSearch, uid: String, primaryKey: String?, _ completion: @escaping (Result) -> Void) { let movie = Movie(id: 1, title: "test", comment: "test movie") addDocuments(client: client, uid: uid, dataset: [movie], primaryKey: primaryKey, completion) } -public func addDocuments(client: MeiliSearch, uid: String, dataset: [T], primaryKey: String?, _ completion: @escaping (Result) -> Void) { +public func addDocuments(client: MeiliSearch, uid: String, dataset: [T], primaryKey: String?, _ completion: @escaping (Result) -> Void) { let jsonEncoder = JSONEncoder() let documents: Data diff --git a/docker-compose.yml b/docker-compose.yml index ab90f7b0..51cf0801 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,7 +18,7 @@ services: meilisearch: image: getmeili/meilisearch:latest ports: - - "7700" + - "7700:7700" environment: - MEILI_MASTER_KEY=masterKey - MEILI_NO_ANALYTICS=true From 7636dff648397de96ad2124e528ad2698d4d8bbc Mon Sep 17 00:00:00 2001 From: James Sherlock <15193942+Sherlouk@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:05:19 +0000 Subject: [PATCH 5/5] Disable cyclomatic_complexity Rule --- .swiftlint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.swiftlint.yml b/.swiftlint.yml index 72153456..1487c80a 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -9,6 +9,7 @@ disabled_rules: - identifier_name - function_body_length - trailing_comma + - cyclomatic_complexity analyzer_rules: - unused_declaration