//
//  AstroWebViewAdaptorTests.swift
//  Astro
//
//  Created by Jason Voll on 2015-10-23.
//  Copyright © 2015 Mobify Research & Development Inc. All rights reserved.
//

import XCTest
import WebKit
@testable import Astro

class AstroWebViewAdaptorTests: AstroTestCase {

    func testNavigationTypesConsistency() {
        let wkWebViewAdaptor = WKWebViewAdaptor(webView: WKWebView())
        let uiWebViewAdaptor = UIWebViewAdaptor(webView: UIWebView())

        for navType in AstroWebViewAdaptor.NavigationType.allValues {
            XCTAssertTrue(wkWebViewAdaptor.navigationTypes.keys.contains(navType))
            XCTAssertTrue(uiWebViewAdaptor.navigationTypes.keys.contains(navType))
        }
    }

    func testGetCookieValueFromString() {
        let cookieValue = AstroWebViewAdaptor.getCookieValueFromString("foo", cookie: "foo=bar;")
        XCTAssert(cookieValue == "bar", "Getting foo from cookie foo=bar should return bar")

        let nullCookieValue1 = AstroWebViewAdaptor.getCookieValueFromString("foo", cookie: "baz=boo;")
        XCTAssert(nullCookieValue1 == nil, "Getting foo from cookie that doesn't contain foo should return nil")

        let nullCookieValue2 = AstroWebViewAdaptor.getCookieValueFromString("foo", cookie: "")
        XCTAssert(nullCookieValue2 == nil, "Getting foo from blank cookie should return nil")

        let emptyCookieValue = AstroWebViewAdaptor.getCookieValueFromString("foo", cookie: "foo=;")
        XCTAssert(emptyCookieValue == "", "Getting foo from cookie without value should return empty string")
    }

    // Flaky test that hangs.
//    func testInterruptedNavigationDoesntTriggerNavigationFailedEvent() {
//        let request1 = URLRequest(url: URL(string: "https://www.google.com")!)
//
//        // ** WKWebView
//        let wkWebView = WKWebView()
//        let wkWebViewAdaptor = WKWebViewAdaptor(webView: wkWebView)
//        let testWKDelegate = TestWebClientDelegate()
//        wkWebViewAdaptor.webClientDelegate = testWKDelegate
//
//        // 1. Start the request
//        wkWebViewAdaptor.load(request1)
//        while testWKDelegate.numberOfPageDidStartLoadingCalls < 1 {
//            RunLoop.current.run(until: Date().addingTimeInterval(0.01))
//        }
//
//        // 2. Interrupt it
//        wkWebViewAdaptor.stopLoading()
//
//        // 3. Wait for web view to settle
//        while wkWebView.isLoading {
//            RunLoop.current.run(until: Date().addingTimeInterval(0.01))
//        }
//
//        let wkWebViewFailures = testWKDelegate.navigationEvents.filter { !$0.isSuccess }
//        AssertEqual(wkWebViewFailures.count, b: 0)
//
//        // ** UIWebView
//        let uiWebView = UIWebView()
//        let uiWebViewAdaptor = UIWebViewAdaptor(webView: uiWebView)
//        let testUIDelegate = TestWebClientDelegate()
//        uiWebViewAdaptor.webClientDelegate = testUIDelegate
//
//        // 1. Start the request
//        uiWebViewAdaptor.load(request1)
//        while testUIDelegate.numberOfPageDidStartLoadingCalls < 1 {
//            RunLoop.current.run(until: Date().addingTimeInterval(0.01))
//        }
//
//        // 2. Interrupt it
//        uiWebViewAdaptor.stopLoading()
//
//        // 3. Wait for web view to settle
//        while uiWebView.isLoading {
//            RunLoop.current.run(until: Date().addingTimeInterval(0.01))
//        }
//        let uiWebViewFailures = testWKDelegate.navigationEvents.filter { !$0.isSuccess }
//        AssertEqual(uiWebViewFailures.count, b: 0)
//    }
}
