diff --git a/IntegrationTests/Extensions/PromiseKit/TezosNodeIntegrationTests+Promises.swift b/IntegrationTests/Extensions/PromiseKit/TezosNodeIntegrationTests+Promises.swift index 7d24e820..9e3361a2 100644 --- a/IntegrationTests/Extensions/PromiseKit/TezosNodeIntegrationTests+Promises.swift +++ b/IntegrationTests/Extensions/PromiseKit/TezosNodeIntegrationTests+Promises.swift @@ -154,7 +154,10 @@ extension TezosNodeIntegrationTests { public func testRunOperation_promises() { let expectation = XCTestExpectation(description: "completion called") - let operation = OperationFactory.testOperationFactory.originationOperation(address: Wallet.testWallet.address) + let operation = OperationFactory.testOperationFactory.originationOperation( + address: Wallet.testWallet.address, + operationFees: nil + ) nodeClient.runOperation(operation, from: .testWallet) .done { result in guard let contents = result["contents"] as? [[String: Any]], let metadata = contents[0]["metadata"] as? [String: Any], @@ -203,12 +206,14 @@ extension TezosNodeIntegrationTests { OperationFactory.testOperationFactory.transactionOperation( amount: Tez("1")!, source: Wallet.testWallet.address, - destination: "tz3WXYtyDUNL91qfiCJtVUX746QpNv5i5ve5" + destination: "tz3WXYtyDUNL91qfiCJtVUX746QpNv5i5ve5", + operationFees: nil ), OperationFactory.testOperationFactory.transactionOperation( amount: Tez("2")!, source: Wallet.testWallet.address, - destination: "tz3WXYtyDUNL91qfiCJtVUX746QpNv5i5ve5" + destination: "tz3WXYtyDUNL91qfiCJtVUX746QpNv5i5ve5", + operationFees: nil ) ] diff --git a/IntegrationTests/TezosKit/TezosNodeIntegrationTests.swift b/IntegrationTests/TezosKit/TezosNodeIntegrationTests.swift index 138c750e..19e45e25 100644 --- a/IntegrationTests/TezosKit/TezosNodeIntegrationTests.swift +++ b/IntegrationTests/TezosKit/TezosNodeIntegrationTests.swift @@ -75,7 +75,7 @@ class TezosNodeIntegrationTests: XCTestCase { /// Sending a bunch of requests quickly can cause race conditions in the Tezos network as counters and operations /// propagate. Define a throttle period in seconds to wait between each test. - let intertestWaitTime: UInt32 = 0 + let intertestWaitTime: UInt32 = 30 sleep(intertestWaitTime) nodeClient = TezosNodeClient(remoteNodeURL: .nodeURL) @@ -287,7 +287,10 @@ class TezosNodeIntegrationTests: XCTestCase { public func testRunOperation() { let expectation = XCTestExpectation(description: "completion called") - let operation = OperationFactory.testOperationFactory.originationOperation(address: Wallet.testWallet.address) + let operation = OperationFactory.testOperationFactory.originationOperation( + address: Wallet.testWallet.address, + operationFees: nil + ) self.nodeClient.runOperation(operation, from: .testWallet) { result in switch result { case .failure(let error): @@ -316,12 +319,14 @@ class TezosNodeIntegrationTests: XCTestCase { OperationFactory.testOperationFactory.transactionOperation( amount: Tez("1")!, source: Wallet.testWallet.address, - destination: "tz3WXYtyDUNL91qfiCJtVUX746QpNv5i5ve5" + destination: "tz3WXYtyDUNL91qfiCJtVUX746QpNv5i5ve5", + operationFees: nil ), OperationFactory.testOperationFactory.transactionOperation( amount: Tez("2")!, source: Wallet.testWallet.address, - destination: "tz3WXYtyDUNL91qfiCJtVUX746QpNv5i5ve5" + destination: "tz3WXYtyDUNL91qfiCJtVUX746QpNv5i5ve5", + operationFees: nil ) ] diff --git a/Tests/TezosKit/MichelsonAnnotationTests.swift b/Tests/TezosKit/MichelsonAnnotationTests.swift new file mode 100644 index 00000000..c7faefed --- /dev/null +++ b/Tests/TezosKit/MichelsonAnnotationTests.swift @@ -0,0 +1,18 @@ +// Copyright Keefer Taylor, 2019. + +import TezosKit +import XCTest + +final class MichelsonAnnotationTests: XCTestCase { + func testValidAnnotations() { + let annotationValue = "tezoskit" + let validAnnotations = [ "@\(annotationValue)", "%\(annotationValue)", ":\(annotationValue)"] + for annotation in validAnnotations { + XCTAssertNotNil(MichelsonAnnotation(annotation: annotation)) + } + } + + func testInvalidAnnotation() { + XCTAssertNil(MichelsonAnnotation(annotation: "&nonsense")) + } +} diff --git a/Tests/TezosKit/OperationFactoryTest.swift b/Tests/TezosKit/OperationFactoryTest.swift index b43e618c..8839c595 100644 --- a/Tests/TezosKit/OperationFactoryTest.swift +++ b/Tests/TezosKit/OperationFactoryTest.swift @@ -24,7 +24,6 @@ class OperationFactoryTest: XCTestCase { func testOriginationOperationWithDefaultFees() { let originationOperation = operationFactory.originationOperation( address: "tz1abc", - contractCode: nil, operationFees: nil ) @@ -92,7 +91,6 @@ class OperationFactoryTest: XCTestCase { func testOriginationOperationWithCustomFees() { let originationOperation = operationFactory.originationOperation( address: "tz1abc", - contractCode: nil, operationFees: .testFees ) diff --git a/TezosKit.xcodeproj/project.pbxproj b/TezosKit.xcodeproj/project.pbxproj index 229e933f..61c86995 100644 --- a/TezosKit.xcodeproj/project.pbxproj +++ b/TezosKit.xcodeproj/project.pbxproj @@ -179,6 +179,8 @@ 77FE788422EEA29300B85B9D /* TestHelpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FE788322EEA29300B85B9D /* TestHelpers.swift */; }; 77FE788622EEE3C800B85B9D /* GetContractStorageRPC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FE788522EEE3C800B85B9D /* GetContractStorageRPC.swift */; }; 77FE788822EEE42500B85B9D /* GetContractStorageRPCTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FE788722EEE42500B85B9D /* GetContractStorageRPCTest.swift */; }; + 77FE788A22EFF92E00B85B9D /* MichelsonAnnotation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FE788922EFF92E00B85B9D /* MichelsonAnnotation.swift */; }; + 77FE788C22EFFA7100B85B9D /* MichelsonAnnotationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77FE788B22EFFA7100B85B9D /* MichelsonAnnotationTests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -410,6 +412,8 @@ 77FE788322EEA29300B85B9D /* TestHelpers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestHelpers.swift; sourceTree = ""; }; 77FE788522EEE3C800B85B9D /* GetContractStorageRPC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetContractStorageRPC.swift; sourceTree = ""; }; 77FE788722EEE42500B85B9D /* GetContractStorageRPCTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GetContractStorageRPCTest.swift; sourceTree = ""; }; + 77FE788922EFF92E00B85B9D /* MichelsonAnnotation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MichelsonAnnotation.swift; sourceTree = ""; }; + 77FE788B22EFFA7100B85B9D /* MichelsonAnnotationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MichelsonAnnotationTests.swift; sourceTree = ""; }; C2BFF006F7695B932864C46D /* Pods_TezosKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TezosKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F4F69CEC90588DB51FE973FC /* Pods_TezosKitTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_TezosKitTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -461,6 +465,7 @@ isa = PBXGroup; children = ( 7730B1D822E95B4500148990 /* MichelsonParameter.swift */, + 77FE788922EFF92E00B85B9D /* MichelsonAnnotation.swift */, 77FE787F22EE907900B85B9D /* MichelsonComparable.swift */, 77FE787722EC336700B85B9D /* NoneMichelsonParameter.swift */, 77FE786922EC320900B85B9D /* BoolMichelsonParameter.swift */, @@ -731,6 +736,7 @@ isa = PBXGroup; children = ( 77633D522247EFE20011106A /* TezosNodeClientTests.swift */, + 77FE788B22EFFA7100B85B9D /* MichelsonAnnotationTests.swift */, 77FE788722EEE42500B85B9D /* GetContractStorageRPCTest.swift */, 77FE788122EE913300B85B9D /* GetBigMapValueRPCTest.swift */, 77FE786322EBE53200B85B9D /* MichelsonTests.swift */, @@ -1096,6 +1102,7 @@ 77CE387C21FC7ED8006ADABA /* TezosNodeClient.swift in Sources */, 77CE385E21FC7ED8006ADABA /* Wallet.swift in Sources */, 77CE384D21FC7ED8006ADABA /* TransactionOperation.swift in Sources */, + 77FE788A22EFF92E00B85B9D /* MichelsonAnnotation.swift in Sources */, 77CE386621FC7ED8006ADABA /* GetProposalsListRPC.swift in Sources */, 7719265A22D92F5E00E63DE4 /* PreapplicationService.swift in Sources */, 77CE387D21FC7ED8006ADABA /* TezosKitError.swift in Sources */, @@ -1141,6 +1148,7 @@ 77B69EBF224E92C900DB4319 /* ConseilClientTests.swift in Sources */, 77CE36E321F7F49F006ADABA /* GetChainHeadHashRPCTest.swift in Sources */, 77CE36FA21F7F49F006ADABA /* TezosKitErrorCodesTest.swift in Sources */, + 77FE788C22EFFA7100B85B9D /* MichelsonAnnotationTests.swift in Sources */, 77CE370321F7F49F006ADABA /* GetProposalUnderEvaluationRPCTest.swift in Sources */, 77FE788222EE913300B85B9D /* GetBigMapValueRPCTest.swift in Sources */, 77CE36FE21F7F49F006ADABA /* GetBallotsRPCTest.swift in Sources */, diff --git a/TezosKit.xcodeproj/xcshareddata/xcschemes/IntegrationTests.xcscheme b/TezosKit.xcodeproj/xcshareddata/xcschemes/IntegrationTests.xcscheme new file mode 100644 index 00000000..f3fd3eba --- /dev/null +++ b/TezosKit.xcodeproj/xcshareddata/xcschemes/IntegrationTests.xcscheme @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/TezosKit/Michelson/MichelsonAnnotation.swift b/TezosKit/Michelson/MichelsonAnnotation.swift new file mode 100644 index 00000000..1e7cf885 --- /dev/null +++ b/TezosKit/Michelson/MichelsonAnnotation.swift @@ -0,0 +1,18 @@ +// Copyright Keefer Taylor, 2019. + +import Foundation + +/// A Michelson annotation. +public class MichelsonAnnotation { + public let value: String + + /// Initialize a new annotation. + /// + /// - Note: Michelson annotations must start with ':', '%', or '@'. + public init?(annotation: String) { + guard annotation.starts(with: ":") || annotation.starts(with: "%") || annotation.starts(with: "@") else { + return nil + } + self.value = annotation + } +} diff --git a/TezosKit/Michelson/MichelsonParameter.swift b/TezosKit/Michelson/MichelsonParameter.swift index 5e5475c1..67f22b8c 100644 --- a/TezosKit/Michelson/MichelsonParameter.swift +++ b/TezosKit/Michelson/MichelsonParameter.swift @@ -4,6 +4,7 @@ import Foundation /// String constants used in Micheline param JSON encoding. internal enum MichelineConstants { + public static let annotations = "annots" public static let args = "args" public static let primitive = "prim" public static let bytes = "bytes"