Files
purchases-ios/Tests/UnitTests/FoundationExtensions/DataExtensionsTests.swift
T

107 lines
3.5 KiB
Swift

//
// Created by RevenueCat on 3/4/20.
// Copyright (c) 2020 Purchases. All rights reserved.
//
import Foundation
import Nimble
import XCTest
@testable import RevenueCat
class DataExtensionsTests: TestCase {
func testAsString() {
let data = Data([
0xe3, 0x88, 0x15, 0x2d,
0x6c, 0x67, 0xf4, 0xd5,
0xf7, 0xa7, 0x8e, 0xdf,
0x07, 0x39, 0x46, 0xf1,
0x58, 0x35, 0x7f, 0x89,
0xa1, 0xdc, 0x74, 0xdf,
0xf8, 0x0a, 0x79, 0x67,
0x40, 0xfd, 0x9d, 0x91
])
expect(data.asString) == "e388152d6c67f4d5f7a78edf073946f158357f89a1dc74dff80a796740fd9d91"
}
func testAsFetchToken() {
let storedReceiptText = Self.readFile(named: Self.receiptFilename)
let storedReceiptData = Self.sampleReceiptData(receiptName: Self.receiptFilename)
let fetchToken = storedReceiptData.asFetchToken
expect(fetchToken).to(equal(storedReceiptText))
expect(storedReceiptData.asFetchToken).to(equal(storedReceiptText))
}
func testStringDataAsUUID() {
expect("sample string".asData.uuid) == UUID(uuidString: "73616D70-6C65-2073-7472-696E67000000")
}
func testStringDataAsHashString() {
expect("sample string".asData.hashString) == "99ad9154f94977dd8913f3b7ea14091d00e52b8931c2bc1cfc7ea62b7c26727b"
}
func testDataAsHashStringHashesTheEntireData() {
expect("a relatively long string that ends in 0".asData.hashString)
!= "a relatively long string that ends in 1".asData.hashString
}
func testStringDataAsSha1() {
expect("sample string".asData.sha1.asString) == "243182b9d0b085c06005bf773212854bf7cd4694"
}
func testDataAsSha1HashesTheEntireData() {
expect("a relatively long string that ends in 0".asData.sha1)
!= "a relatively long string that ends in 1".asData.sha1
}
func testReceiptDataAsHashString() {
let storedReceiptData = Self.sampleReceiptData(receiptName: Self.receiptFilename)
expect(storedReceiptData.hashString) == "d18b7c0ffe3577a9dd732840a30ac4b3655b412e69d84f07d991f48e8d3273d8"
}
func testRandomNonceHasCorrectSize() throws {
expect(Data.randomNonce().count) == Data.nonceLength
}
func testRandomNonceIsRandom() throws {
let random1 = Data.randomNonce()
let random2 = Data.randomNonce()
expect(random1) != random2
}
}
extension DataExtensionsTests {
static func sampleReceiptData(receiptName: String) -> Data {
let receiptText = self.readFile(named: receiptName)
guard let receiptData = Data(base64Encoded: receiptText) else {
fatalError("Couldn't decode base64 file: \(receiptName).\(Self.fileExtension)")
}
return receiptData
}
static func readFile(named filename: String) -> String {
guard let pathString = Bundle(for: Self.self).path(forResource: filename,
ofType: Self.fileExtension) else {
fatalError("File \(filename).\(Self.fileExtension) not found")
}
do {
return try String(contentsOfFile: pathString, encoding: .utf8)
} catch let error {
fatalError("Couldn't read file named \(filename).\(Self.fileExtension).\n" +
"Error: \(error.localizedDescription)")
}
}
private static let fileExtension = "txt"
private static let receiptFilename = "base64EncodedReceiptSampleForDataExtension"
}