Change license to AGPL
This commit:
- Updates the `LICENSE` file
- Start every file with something like:
// Copyright YEAR_FIRST_PUBLISHED Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
---
First, I removed existing license headers with this Ruby 3.1.2 script:
require 'set'
EXTENSIONS_TO_CHECK = Set['.h', '.hpp', '.cpp', '.m', '.mm', '.pch', '.swift']
same = 0
different = 0
all_files = `git ls-files`.lines.map { |line| line.strip }
all_files.each do |relative_path|
if relative_path == 'Pods'
next
end
unless EXTENSIONS_TO_CHECK.include? File.extname(relative_path)
next
end
path = File.expand_path(relative_path)
contents = File.read(path)
new_contents = contents.sub(/\/\/\n\/\/ Copyright .*\n\/\/\n\n/, '')
if contents == new_contents
same += 1
else
different += 1
end
File.write(path, new_contents)
end
puts "updated #{different} file(s), left #{same} untouched"
I'm sure this script could be improved, but it worked well enough.
Then, I created `Scripts/lint/lint-license-headers` and ran it to auto-
fix a lot of files. This changed the mode of some files, but I think
that's actually desirable. For example,
`SignalServiceKit/src/Util/AppContext.m` previously had a mode of
`0755/-rwxr-xr-x`, and it's now `0644/-rw-r--r--`.
Then I fixed some stragglers and updated the precommit script.
See [a similar change in the Desktop app][0].
[0]: 8bfaf598af
121 lines
4.2 KiB
Swift
121 lines
4.2 KiB
Swift
//
|
|
// Copyright 2022 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
//
|
|
|
|
import XCTest
|
|
|
|
class SubscriptionChargeFailureTest: XCTestCase {
|
|
typealias ChargeFailure = Subscription.ChargeFailure
|
|
|
|
func testNilInit() {
|
|
let chargeFailure = ChargeFailure()
|
|
XCTAssertNil(chargeFailure.code)
|
|
}
|
|
|
|
func testStringInit() {
|
|
let chargeFailure = ChargeFailure(code: "foo bar")
|
|
XCTAssertEqual(chargeFailure.code, "foo bar")
|
|
}
|
|
|
|
func testJsonInit() {
|
|
let chargeFailure = ChargeFailure(jsonDictionary: ["code": "foo"])
|
|
XCTAssertEqual(chargeFailure.code, "foo")
|
|
|
|
let strangeInputs: [[String: Any]] = [[:], ["no code": "missing"], ["code": 123]]
|
|
for jsonDictionary in strangeInputs {
|
|
let chargeFailure = ChargeFailure(jsonDictionary: jsonDictionary)
|
|
XCTAssertNil(chargeFailure.code)
|
|
}
|
|
}
|
|
}
|
|
|
|
class SubscriptionTest: XCTestCase {
|
|
let subscriptionDict: [String: Any] = {
|
|
let endOfCurrentPeriodRawValue: Double = 1618881836
|
|
let billingCycleAnchorRawValue: Double = 1587345836
|
|
return [
|
|
"level": 123,
|
|
"currency": "USD",
|
|
"amount": 500,
|
|
"endOfCurrentPeriod": endOfCurrentPeriodRawValue,
|
|
"billingCycleAnchor": billingCycleAnchorRawValue,
|
|
"active": true,
|
|
"cancelAtPeriodEnd": false,
|
|
"status": "active"
|
|
]
|
|
}()
|
|
|
|
func testJsonInit() throws {
|
|
let subscription = try Subscription(subscriptionDict: subscriptionDict,
|
|
chargeFailureDict: nil)
|
|
|
|
XCTAssertEqual(subscription.level, 123)
|
|
XCTAssertEqual(subscription.currency, "USD")
|
|
XCTAssertEqual(subscription.amount, 500)
|
|
XCTAssertEqual(subscription.endOfCurrentPeriod, 1618881836)
|
|
XCTAssertEqual(subscription.billingCycleAnchor, 1587345836)
|
|
XCTAssertTrue(subscription.active)
|
|
XCTAssertFalse(subscription.cancelAtEndOfPeriod)
|
|
XCTAssertEqual(subscription.status, .active)
|
|
XCTAssertNil(subscription.chargeFailure)
|
|
}
|
|
|
|
func testJsonInitWithUnexpectedStatus() throws {
|
|
var subscriptionDictWithUnexpectedStatus = subscriptionDict
|
|
subscriptionDictWithUnexpectedStatus["status"] = "unexpected!!"
|
|
|
|
let subscription = try Subscription(subscriptionDict: subscriptionDictWithUnexpectedStatus,
|
|
chargeFailureDict: nil)
|
|
|
|
XCTAssertEqual(subscription.status, .unknown)
|
|
XCTAssertNil(subscription.chargeFailure)
|
|
}
|
|
|
|
func testChargeFailure() throws {
|
|
let subscription = try Subscription(subscriptionDict: subscriptionDict,
|
|
chargeFailureDict: ["code": "foo bar"])
|
|
XCTAssertEqual(subscription.chargeFailure?.code, "foo bar")
|
|
|
|
let strangeChargeFailures: [[String: Any]] = [[:], ["no code": "missing"], ["code": 123]]
|
|
for chargeFailureDict in strangeChargeFailures {
|
|
let subscription = try Subscription(subscriptionDict: subscriptionDict,
|
|
chargeFailureDict: chargeFailureDict)
|
|
XCTAssertNotNil(subscription.chargeFailure)
|
|
XCTAssertNil(subscription.chargeFailure?.code)
|
|
}
|
|
}
|
|
}
|
|
|
|
class BadgeIdsTest: XCTestCase {
|
|
func testSubscriptionContains() {
|
|
let testCases: [(String, Bool)] = [
|
|
("R_LOW", true),
|
|
("R_MED", true),
|
|
("R_HIGH", true),
|
|
("BOOST", false),
|
|
("GIFT", false),
|
|
("OTHER", false),
|
|
("", false)
|
|
]
|
|
for (badgeId, shouldMatch) in testCases {
|
|
XCTAssertEqual(SubscriptionBadgeIds.contains(badgeId), shouldMatch, "\(badgeId)")
|
|
}
|
|
}
|
|
|
|
func testBoostContains() {
|
|
let testCases: [(String, Bool)] = [
|
|
("R_LOW", false),
|
|
("R_MED", false),
|
|
("R_HIGH", false),
|
|
("BOOST", true),
|
|
("GIFT", false),
|
|
("OTHER", false),
|
|
("", false)
|
|
]
|
|
for (badgeId, shouldMatch) in testCases {
|
|
XCTAssertEqual(BoostBadgeIds.contains(badgeId), shouldMatch, "\(badgeId)")
|
|
}
|
|
}
|
|
}
|