diff --git a/Sources/NetworkLayer/Routes/Instagram+Statuses.swift b/Sources/NetworkLayer/Routes/Instagram+Statuses.swift new file mode 100644 index 0000000..801a8c8 --- /dev/null +++ b/Sources/NetworkLayer/Routes/Instagram+Statuses.swift @@ -0,0 +1,48 @@ +// +// Instagram+Statuses.swift +// TwitterAPI-iOS +// +// Created by MACHADO KEVIN on 27/01/2019. +// Copyright © 2019 Zerty Color. All rights reserved. +// + +import Foundation +import Alamofire + +extension Twitter.Statuses: Provider { + typealias Element = [Tweet] + + var path: Path { + switch self { + case .homeTimeline: + return "home_timeline.json" + case .userTimeline(let screenName, let userID): + var path = "user_timeline.json" + var first = true + if let screenName = screenName { + path = path+"?screen_name=\(screenName)" + first = false + } + if let userID = userID { + path = path+"\(first ? "?": "&")user_id=\(userID)" + } + return path + case .mentionTimeline: + return "mentions_timeline.json" + } + } + var params: Parameters? { + return nil + } + var method: HTTPMethod { + switch self { + case .homeTimeline: + return .get + case .userTimeline(_): + return .get + case .mentionTimeline: + return .get + } + } + +} diff --git a/Sources/NetworkLayer/Routes/Instagram+User.swift b/Sources/NetworkLayer/Routes/Instagram+User.swift deleted file mode 100644 index d8ee94e..0000000 --- a/Sources/NetworkLayer/Routes/Instagram+User.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// Instagram+User.swift -// TwitterAPI-iOS -// -// Created by MACHADO KEVIN on 27/01/2019. -// Copyright © 2019 Zerty Color. All rights reserved. -// - -import Foundation -import Alamofire - -extension Twitter.User: Provider { - typealias Element = User - - var path: Path { - switch self { - case .info(let token): - return "users/self/?access_token=\(token)" - } - } - var params: Parameters? { - return nil - } - var method: HTTPMethod { - switch self { - case .info(_): - return .get - } - } - -} diff --git a/Sources/NetworkLayer/Routes/Routes.swift b/Sources/NetworkLayer/Routes/Routes.swift index 2285233..c3c5f8a 100644 --- a/Sources/NetworkLayer/Routes/Routes.swift +++ b/Sources/NetworkLayer/Routes/Routes.swift @@ -10,8 +10,10 @@ import Foundation import Alamofire struct Twitter { - enum User { - case info(token: String) + enum Statuses { + case homeTimeline + case userTimeline(screenName: String?, userID: String?) + case mentionTimeline } enum Media { case medias(token: String, count: Int, minMediaId: String, maxMediaId: String) diff --git a/Sources/TwitterAPI.swift b/Sources/TwitterAPI.swift index ffd37d4..a38ce33 100644 --- a/Sources/TwitterAPI.swift +++ b/Sources/TwitterAPI.swift @@ -10,8 +10,13 @@ import Foundation class TwitterAPI { - func getUser(completion: @escaping (User) -> Void) { - Twitter.User.info(token: "fs").request(completion: completion) + func getUserTimeline(from screenname: String, completion: @escaping ([Tweet]) -> Void) { + Twitter.Statuses.userTimeline(screenName: screenname, userID: nil) + .request(completion: completion) } + func getUserTimeline(by userId: String, completion: @escaping ([Tweet]) -> Void) { + Twitter.Statuses.userTimeline(screenName: nil, userID: userId) + .request(completion: completion) + } } diff --git a/Tests/TwitterAPITests/TwitterAPITests.swift b/Tests/TwitterAPITests/TwitterAPITests.swift index 0a6d63e..0299ba0 100644 --- a/Tests/TwitterAPITests/TwitterAPITests.swift +++ b/Tests/TwitterAPITests/TwitterAPITests.swift @@ -8,14 +8,28 @@ import Foundation import XCTest -import TwitterAPI +@testable import TwitterAPI class TwitterAPITests: XCTestCase { - static var allTests = [("testAlwaysSuccess", testAlwaysSuccess)] + func testUserTimelineScreenName() { + let api = Twitter.Statuses.userTimeline(screenName: "djnivek", userID: nil) + XCTAssert(api.path == "user_timeline.json?screen_name=djnivek") + } + + func testUserTimelineUserId() { + let api = Twitter.Statuses.userTimeline(screenName: nil, userID: "12") + XCTAssert(api.path == "user_timeline.json?user_id=12") + } + + func testUserTimelineScreenNameAndUserId() { + let api = Twitter.Statuses.userTimeline(screenName: "djnivek", userID: "12") + XCTAssert(api.path == "user_timeline.json?screen_name=djnivek&user_id=12") + } - func testAlwaysSuccess() { - XCTAssert(true) + func testUserTimelineEmpty() { + let api = Twitter.Statuses.userTimeline(screenName: nil, userID: nil) + XCTAssert(api.path == "user_timeline.json") } } diff --git a/TwitterAPI.xcodeproj/project.pbxproj b/TwitterAPI.xcodeproj/project.pbxproj index 19c5835..232c1ec 100644 --- a/TwitterAPI.xcodeproj/project.pbxproj +++ b/TwitterAPI.xcodeproj/project.pbxproj @@ -60,7 +60,7 @@ OBJ_89 /* InstaConst.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_15 /* InstaConst.swift */; }; OBJ_90 /* Instagram+Comment.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_16 /* Instagram+Comment.swift */; }; OBJ_91 /* Instagram+Media.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_17 /* Instagram+Media.swift */; }; - OBJ_92 /* Instagram+User.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* Instagram+User.swift */; }; + OBJ_92 /* Instagram+Statuses.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_18 /* Instagram+Statuses.swift */; }; OBJ_93 /* Routes.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_19 /* Routes.swift */; }; OBJ_94 /* TwitterAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = OBJ_20 /* TwitterAPI.swift */; }; OBJ_96 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = "Alamofire::Alamofire::Product" /* Alamofire.framework */; }; @@ -116,7 +116,7 @@ OBJ_15 /* InstaConst.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstaConst.swift; sourceTree = ""; }; OBJ_16 /* Instagram+Comment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Instagram+Comment.swift"; sourceTree = ""; }; OBJ_17 /* Instagram+Media.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Instagram+Media.swift"; sourceTree = ""; }; - OBJ_18 /* Instagram+User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Instagram+User.swift"; sourceTree = ""; }; + OBJ_18 /* Instagram+Statuses.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Instagram+Statuses.swift"; sourceTree = ""; }; OBJ_19 /* Routes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Routes.swift; sourceTree = ""; }; OBJ_20 /* TwitterAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwitterAPI.swift; sourceTree = ""; }; OBJ_23 /* TwitterAPITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TwitterAPITests.swift; sourceTree = ""; }; @@ -197,7 +197,7 @@ OBJ_15 /* InstaConst.swift */, OBJ_16 /* Instagram+Comment.swift */, OBJ_17 /* Instagram+Media.swift */, - OBJ_18 /* Instagram+User.swift */, + OBJ_18 /* Instagram+Statuses.swift */, OBJ_19 /* Routes.swift */, ); path = Routes; @@ -483,7 +483,7 @@ 4AA01DF02218721B00706294 /* UserMention.swift in Sources */, OBJ_90 /* Instagram+Comment.swift in Sources */, OBJ_91 /* Instagram+Media.swift in Sources */, - OBJ_92 /* Instagram+User.swift in Sources */, + OBJ_92 /* Instagram+Statuses.swift in Sources */, 4AD4B1352209C7CC001051AA /* Coordinate.swift in Sources */, 4AD4B13B2209C81E001051AA /* Entities.swift in Sources */, OBJ_93 /* Routes.swift in Sources */,