//
//  PanModalTests.swift
//  PanModalTests
//
//  Created by Tosin Afolabi on 2/26/19.
//  Copyright © 2019 PanModal. All rights reserved.
//

import XCTest
@testable import PanModal

/**
 ⚠️ Run tests on iPhone 8 iOS (12.1) Sim
 */

class PanModalTests: XCTestCase {

    class MockViewController: UIViewController, PanModalPresentable {
        var panScrollable: UIScrollView? { return nil }
    }

    class AdjustedMockViewController: UITableViewController, PanModalPresentable {
        var panScrollable: UIScrollView? { return tableView }
        var shortFormHeight: PanModalHeight { return .contentHeight(300) }
        var longFormHeight: PanModalHeight { return .maxHeightWithTopInset(50) }
        // for testing purposes - to mimic safe area insets
        var topLayoutOffset: CGFloat { return 20 }
        var bottomLayoutOffset: CGFloat { return 44 }
    }

    private var vc: AdjustedMockViewController!

    override func setUp() {
        super.setUp()
        vc = AdjustedMockViewController()
    }

    override func tearDown() {
        super.tearDown()
        vc = nil
    }

    func testPresentableDefaults() {

        let vc = MockViewController()

        XCTAssertEqual(vc.topOffset, 41.0)
        XCTAssertEqual(vc.shortFormHeight, PanModalHeight.maxHeight)
        XCTAssertEqual(vc.longFormHeight, PanModalHeight.maxHeight)
        XCTAssertEqual(vc.springDamping, 0.8)
        XCTAssertEqual(vc.panModalBackgroundColor, UIColor.black.withAlphaComponent(0.7))
        XCTAssertEqual(vc.dragIndicatorBackgroundColor, UIColor.lightGray)
        XCTAssertEqual(vc.scrollIndicatorInsets, .zero)
        XCTAssertEqual(vc.anchorModalToLongForm, true)
        XCTAssertEqual(vc.allowsExtendedPanScrolling, false)
        XCTAssertEqual(vc.allowsDragToDismiss, true)
        XCTAssertEqual(vc.allowsTapToDismiss, true)
        XCTAssertEqual(vc.isUserInteractionEnabled, true)
        XCTAssertEqual(vc.isHapticFeedbackEnabled, true)
        XCTAssertEqual(vc.shouldRoundTopCorners, false)
        XCTAssertEqual(vc.showDragIndicator, false)
        XCTAssertEqual(vc.shouldRoundTopCorners, false)
        XCTAssertEqual(vc.shouldShowScrollIndicator, true)
        XCTAssertEqual(vc.bottomScrollInset, nil)
        XCTAssertEqual(vc.cornerRadius, 8.0)
        XCTAssertEqual(vc.transitionDuration, PanModalAnimator.Constants.defaultTransitionDuration)
        XCTAssertEqual(vc.transitionAnimationOptions, [.curveEaseInOut, .allowUserInteraction, .beginFromCurrentState])
    }

    func testPresentableYValues() {

        XCTAssertEqual(vc.topLayoutOffset, 20)
        XCTAssertEqual(vc.bottomLayoutOffset, 44)

        XCTAssertEqual(vc.topMargin(from: .maxHeight), 0)
        XCTAssertEqual(vc.topMargin(from: .maxHeightWithTopInset(40)), 40)
        XCTAssertEqual(vc.topMargin(from: .contentHeight(200)), 447)
        XCTAssertEqual(vc.topMargin(from: .contentHeightIgnoringSafeArea(200)), 447)

        XCTAssertEqual(vc.shortFormYPos, 388)
        XCTAssertEqual(vc.longFormYPos, 91)
        XCTAssertEqual(vc.bottomYPos, vc.view.frame.height)

        XCTAssertEqual(vc.view.frame.height, UIScreen.main.bounds.size.height - 20)
    }
}
