集成 WechatOpenSDK、www.zhifly.cn/suixinkan/ 通用链接与邀请页分享能力,附带 AASA 部署文件与单元测试。 Co-authored-by: Cursor <cursoragent@cursor.com>
69 lines
2.6 KiB
Swift
69 lines
2.6 KiB
Swift
//
|
|
// WeChatShareServiceTests.swift
|
|
// suixinkanTests
|
|
//
|
|
|
|
import UIKit
|
|
import XCTest
|
|
@testable import suixinkan
|
|
|
|
final class WeChatShareServiceTests: XCTestCase {
|
|
func testUniversalLinkMustEndWithSlash() {
|
|
XCTAssertTrue(WeChatConfig.validateUniversalLink(WeChatConfig.universalLink))
|
|
XCTAssertFalse(WeChatConfig.validateUniversalLink("https://www.zhifly.cn/suixinkan"))
|
|
XCTAssertFalse(WeChatConfig.validateUniversalLink("http://www.zhifly.cn/suixinkan/"))
|
|
}
|
|
|
|
func testShareSceneMapsToWXValues() {
|
|
XCTAssertEqual(WeChatShareScene.session.wxSceneValue, 0)
|
|
XCTAssertEqual(WeChatShareScene.timeline.wxSceneValue, 1)
|
|
XCTAssertEqual(WeChatShareScene.favorite.wxSceneValue, 2)
|
|
}
|
|
|
|
func testShareResultFromWXErrorCode() {
|
|
XCTAssertEqual(WeChatShareResult.fromWXErrorCode(0), .success)
|
|
XCTAssertEqual(WeChatShareResult.fromWXErrorCode(-2), .cancelled)
|
|
XCTAssertEqual(WeChatShareResult.fromWXErrorCode(99), .unknown(99))
|
|
}
|
|
|
|
func testThumbImageCompressionStaysWithinLimit() throws {
|
|
let size = CGSize(width: 512, height: 512)
|
|
let format = UIGraphicsImageRendererFormat.default()
|
|
format.scale = 1
|
|
let renderer = UIGraphicsImageRenderer(size: size, format: format)
|
|
let image = renderer.image { context in
|
|
UIColor.systemBlue.setFill()
|
|
context.fill(CGRect(origin: .zero, size: size))
|
|
}
|
|
|
|
let thumbData = try XCTUnwrap(WeChatThumbImageProcessor.makeThumbData(from: image))
|
|
XCTAssertLessThanOrEqual(thumbData.count, WeChatThumbImageProcessor.maxThumbBytes)
|
|
}
|
|
|
|
func testThumbImageResizeReducesLargeImage() {
|
|
let size = CGSize(width: 800, height: 600)
|
|
let format = UIGraphicsImageRendererFormat.default()
|
|
format.scale = 1
|
|
let renderer = UIGraphicsImageRenderer(size: size, format: format)
|
|
let image = renderer.image { _ in }
|
|
|
|
let resized = WeChatThumbImageProcessor.resize(image, maxPixel: 120)
|
|
XCTAssertLessThanOrEqual(max(resized.size.width, resized.size.height), 120)
|
|
}
|
|
|
|
func testWebPagePayloadValidationRequiresNonEmptyFields() async {
|
|
await MainActor.run {
|
|
let expectation = expectation(description: "invalid title")
|
|
WeChatShareService.shareWebPage(
|
|
WeChatWebPageSharePayload(title: " ", description: "desc", url: "https://example.com"),
|
|
scene: .session
|
|
) { result in
|
|
if case .invalidPayload = result {
|
|
expectation.fulfill()
|
|
}
|
|
}
|
|
wait(for: [expectation], timeout: 1)
|
|
}
|
|
}
|
|
}
|