mirror of
https://github.com/mastodon/mastodon-ios.git
synced 2025-01-31 09:35:13 +01:00
feat: implement onboarding /servers and /categories endpoint
This commit is contained in:
parent
587d16a829
commit
c919a724ab
@ -123,6 +123,7 @@
|
||||
DB98338725C945ED00AD9700 /* Strings.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98338525C945ED00AD9700 /* Strings.swift */; };
|
||||
DB98338825C945ED00AD9700 /* Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98338625C945ED00AD9700 /* Assets.swift */; };
|
||||
DB98339C25C96DE600AD9700 /* APIService+Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB98339B25C96DE600AD9700 /* APIService+Account.swift */; };
|
||||
DBD9149025DF6D8D00903DFD /* APIService+Onboarding.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */; };
|
||||
DBE0821525CD382600FD6BBD /* MastodonRegisterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */; };
|
||||
DBE0822425CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */; };
|
||||
/* End PBXBuildFile section */
|
||||
@ -305,6 +306,7 @@
|
||||
DB98338525C945ED00AD9700 /* Strings.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Strings.swift; sourceTree = "<group>"; };
|
||||
DB98338625C945ED00AD9700 /* Assets.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Assets.swift; sourceTree = "<group>"; };
|
||||
DB98339B25C96DE600AD9700 /* APIService+Account.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Account.swift"; sourceTree = "<group>"; };
|
||||
DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "APIService+Onboarding.swift"; sourceTree = "<group>"; };
|
||||
DBE0821425CD382600FD6BBD /* MastodonRegisterViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewController.swift; sourceTree = "<group>"; };
|
||||
DBE0822325CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MastodonRegisterViewModel.swift; sourceTree = "<group>"; };
|
||||
DBF53F5F25C14E88008AAC7B /* Mastodon.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; name = Mastodon.xctestplan; path = Mastodon/Mastodon.xctestplan; sourceTree = "<group>"; };
|
||||
@ -677,6 +679,7 @@
|
||||
DB45FB0925CA87BC005A8AC7 /* CoreData */,
|
||||
2D61335625C1887F00CAE157 /* Persist */,
|
||||
2D61335D25C1894B00CAE157 /* APIService.swift */,
|
||||
DBD9148F25DF6D8D00903DFD /* APIService+Onboarding.swift */,
|
||||
2DF75BA625D10E1000694EC8 /* APIService+Favorite.swift */,
|
||||
DB98337E25C9452D00AD9700 /* APIService+APIError.swift */,
|
||||
DB98336A25C9420100AD9700 /* APIService+App.swift */,
|
||||
@ -1227,6 +1230,7 @@
|
||||
2DA7D04425CA52B200804E11 /* TimelineLoaderTableViewCell.swift in Sources */,
|
||||
DB8AF52F25C13561002E6C99 /* DocumentStore.swift in Sources */,
|
||||
2D38F1EB25CD477000561493 /* HomeTimelineViewModel+LoadLatestState.swift in Sources */,
|
||||
DBD9149025DF6D8D00903DFD /* APIService+Onboarding.swift in Sources */,
|
||||
DB98337F25C9452D00AD9700 /* APIService+APIError.swift in Sources */,
|
||||
2DF123A725C3B0210020F248 /* ActiveLabel.swift in Sources */,
|
||||
DBE0822425CD3F1E00FD6BBD /* MastodonRegisterViewModel.swift in Sources */,
|
||||
|
26
Mastodon/Service/APIService/APIService+Onboarding.swift
Normal file
26
Mastodon/Service/APIService/APIService+Onboarding.swift
Normal file
@ -0,0 +1,26 @@
|
||||
//
|
||||
// APIService+Onboarding.swift
|
||||
// Mastodon
|
||||
//
|
||||
// Created by MainasuK Cirno on 2021-2-19.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import Combine
|
||||
import MastodonSDK
|
||||
|
||||
extension APIService {
|
||||
|
||||
func servers(
|
||||
language: String?,
|
||||
category: String?
|
||||
) -> AnyPublisher<Mastodon.Response.Content<[Mastodon.Entity.Server]>, Error> {
|
||||
let query = Mastodon.API.Onboarding.ServersQuery(language: language, category: category)
|
||||
return Mastodon.API.Onboarding.servers(session: session, query: query)
|
||||
}
|
||||
|
||||
func categories() -> AnyPublisher<Mastodon.Response.Content<[Mastodon.Entity.Category]>, Error> {
|
||||
return Mastodon.API.Onboarding.categories(session: session)
|
||||
}
|
||||
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
//
|
||||
// Mastodon+API+Server.swift
|
||||
// Mastodon+API+Onboarding.swift
|
||||
//
|
||||
//
|
||||
// Created by MainasuK Cirno on 2021-2-18.
|
||||
@ -8,11 +8,25 @@
|
||||
import Foundation
|
||||
import Combine
|
||||
|
||||
extension Mastodon.API.Server {
|
||||
extension Mastodon.API.Onboarding {
|
||||
|
||||
static let serversEndpointURL = Mastodon.API.joinMastodonEndpointURL.appendingPathComponent("servers")
|
||||
static let categoriesEndpointURL = Mastodon.API.joinMastodonEndpointURL.appendingPathComponent("categories")
|
||||
|
||||
/// Fetch server list
|
||||
///
|
||||
/// Using this endpoint to fetch booked servers
|
||||
///
|
||||
/// - Since: 3.3.0
|
||||
/// - Version: 3.3.0
|
||||
/// # Last Update
|
||||
/// 2021/2/19
|
||||
/// # Reference
|
||||
/// undocumented
|
||||
/// - Parameters:
|
||||
/// - session: `URLSession`
|
||||
/// - query: `ServerQuery`
|
||||
/// - Returns: `AnyPublisher` contains `Server` nested in the response
|
||||
public static func servers(
|
||||
session: URLSession,
|
||||
query: ServersQuery
|
||||
@ -30,6 +44,19 @@ extension Mastodon.API.Server {
|
||||
.eraseToAnyPublisher()
|
||||
}
|
||||
|
||||
/// Fetch server catagories
|
||||
///
|
||||
/// Using this endpoint to fetch booked catagories
|
||||
///
|
||||
/// - Since: 3.3.0
|
||||
/// - Version: 3.3.0
|
||||
/// # Last Update
|
||||
/// 2021/2/19
|
||||
/// # Reference
|
||||
/// undocumented
|
||||
/// - Parameters:
|
||||
/// - session: `URLSession`
|
||||
/// - Returns: `AnyPublisher` contains `Category` nested in the response
|
||||
public static func categories(
|
||||
session: URLSession
|
||||
) -> AnyPublisher<Mastodon.Response.Content<[Mastodon.Entity.Category]>, Error> {
|
||||
@ -48,9 +75,9 @@ extension Mastodon.API.Server {
|
||||
|
||||
}
|
||||
|
||||
extension Mastodon.API.Server {
|
||||
extension Mastodon.API.Onboarding {
|
||||
|
||||
public struct ServersQuery: Codable, GetQuery {
|
||||
public struct ServersQuery: GetQuery {
|
||||
public let language: String?
|
||||
public let category: String?
|
||||
|
@ -88,8 +88,8 @@ extension Mastodon.API {
|
||||
public enum App { }
|
||||
public enum Instance { }
|
||||
public enum OAuth { }
|
||||
public enum Onboarding { }
|
||||
public enum Timeline { }
|
||||
public enum Server { }
|
||||
public enum Favorites { }
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,66 @@
|
||||
//
|
||||
// MastodonSDK+API+OnboardingTests.swift
|
||||
//
|
||||
//
|
||||
// Created by MainasuK Cirno on 2021-2-18.
|
||||
//
|
||||
|
||||
import os.log
|
||||
import XCTest
|
||||
import Combine
|
||||
@testable import MastodonSDK
|
||||
|
||||
extension MastodonSDKTests {
|
||||
|
||||
func testServers() throws {
|
||||
try _testServers(query: Mastodon.API.Onboarding.ServersQuery(language: nil, category: nil))
|
||||
try _testServers(query: Mastodon.API.Onboarding.ServersQuery(language: "en", category: "tech"))
|
||||
}
|
||||
|
||||
func _testServers(query: Mastodon.API.Onboarding.ServersQuery) throws {
|
||||
let theExpectation = expectation(description: "Fetch Server List")
|
||||
Mastodon.API.Onboarding.servers(
|
||||
session: session,
|
||||
query: query
|
||||
)
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { completion in
|
||||
switch completion {
|
||||
case .failure(let error):
|
||||
XCTFail(error.localizedDescription)
|
||||
case .finished:
|
||||
break
|
||||
}
|
||||
} receiveValue: { response in
|
||||
XCTAssert(!response.value.isEmpty)
|
||||
theExpectation.fulfill()
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
|
||||
wait(for: [theExpectation], timeout: 10.0)
|
||||
}
|
||||
|
||||
func testCatagories() throws {
|
||||
let theExpectation = expectation(description: "Fetch Server Catagories")
|
||||
Mastodon.API.Onboarding.categories(
|
||||
session: session
|
||||
)
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { completion in
|
||||
switch completion {
|
||||
case .failure(let error):
|
||||
XCTFail(error.localizedDescription)
|
||||
case .finished:
|
||||
break
|
||||
}
|
||||
} receiveValue: { response in
|
||||
XCTAssert(!response.value.isEmpty)
|
||||
theExpectation.fulfill()
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
|
||||
wait(for: [theExpectation], timeout: 10.0)
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,45 +0,0 @@
|
||||
//
|
||||
// MastodonSDK+API+ServerTests.swift
|
||||
//
|
||||
//
|
||||
// Created by MainasuK Cirno on 2021-2-18.
|
||||
//
|
||||
|
||||
import os.log
|
||||
import XCTest
|
||||
import Combine
|
||||
@testable import MastodonSDK
|
||||
|
||||
extension MastodonSDKTests {
|
||||
|
||||
func testServers() throws {
|
||||
try _testServers(query: Mastodon.API.Server.ServersQuery(language: nil, category: nil))
|
||||
try _testServers(query: Mastodon.API.Server.ServersQuery(language: "en", category: "tech"))
|
||||
}
|
||||
|
||||
func _testServers(query: Mastodon.API.Server.ServersQuery) throws {
|
||||
let theExpectation = expectation(description: "Fetch Server List")
|
||||
Mastodon.API.Server.servers(
|
||||
session: session,
|
||||
query: query
|
||||
)
|
||||
.receive(on: DispatchQueue.main)
|
||||
.sink { completion in
|
||||
switch completion {
|
||||
case .failure(let error):
|
||||
XCTFail(error.localizedDescription)
|
||||
case .finished:
|
||||
break
|
||||
}
|
||||
} receiveValue: { response in
|
||||
XCTAssert(!response.value.isEmpty)
|
||||
theExpectation.fulfill()
|
||||
}
|
||||
.store(in: &disposeBag)
|
||||
|
||||
wait(for: [theExpectation], timeout: 10.0)
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user