//
//  Copyright (c) 2018 Open Whisper Systems. All rights reserved.
//

import XCTest
@testable import SignalServiceKit

class ContactDiscoveryOperationTest: XCTestCase {

    override func setUp() {
        super.setUp()
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
        super.tearDown()
    }

    func tesBoolArrayFromEmptyData() {
        let data = Data()
        let bools = CDSBatchOperation.boolArray(data: data)
        XCTAssert(bools == [])
    }

    func testBoolArrayFromFalseByte() {
        let data = Data(repeating: 0x00, count: 4)
        let bools = CDSBatchOperation.boolArray(data: data)
        XCTAssert(bools == [false, false, false, false])
    }

    func testBoolArrayFromTrueByte() {
        let data = Data(repeating: 0x01, count: 4)
        let bools = CDSBatchOperation.boolArray(data: data)
        XCTAssert(bools == [true, true, true, true])
    }

    func testBoolArrayFromMixedBytes() {
        let data = Data(bytes: [0x01, 0x00, 0x01, 0x01])
        let bools = CDSBatchOperation.boolArray(data: data)
        XCTAssert(bools == [true, false, true, true])
    }

    func testEncodeNumber() {
        let recipientIds = [ "+1011" ]
        let actual = try! CDSBatchOperation.encodePhoneNumbers(recipientIds: recipientIds)
        let expected: Data = Data(bytes: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf3])

        XCTAssertEqual(expected, actual)
    }

    func testEncodeMultipleNumber() {
        let recipientIds = [ "+1011", "+15551231234"]
        let actual = try! CDSBatchOperation.encodePhoneNumbers(recipientIds: recipientIds)
        let expected: Data = Data(bytes: [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf3,
                                          0x00, 0x00, 0x00, 0x03, 0x9e, 0xec, 0xf5, 0x02])

        XCTAssertEqual(expected, actual)
    }
}
