public async Task <Response> Invoke(byte[] serializedRequest)
        {
            var deserializedRequest = _serializer.RequestSerializer.DeserializeRequest <TContract>(serializedRequest);
            var response            = await ContractParser <TContract> .Invoke(_instance, _serializer.ResponseSerializer, deserializedRequest.Method, deserializedRequest.Args.Values.ToArray());

            return(response);
        }
Example #2
0
        static TimerBoundaryEvent CreateTimeBoundaryEvent(XElement xElement)
        {
            var timerBoundaryEvent = new TimerBoundaryEvent();

            FillCommonProcessElementAttributes(timerBoundaryEvent, xElement);
            timerBoundaryEvent.AttachedTo = GetAttachedToElement(xElement);

            var xTimerDefinitionType = xElement.Element("DefinitionType");

            if (xTimerDefinitionType == null)
            {
                throw new InvalidElementException($"Timer event at line {ContractParser.GetLineNumber(xElement)} " +
                                                  $"is missing timer definition type");
            }
            if (Enum.TryParse(xTimerDefinitionType.Value, out TimerDefinitionType parsedDefinitionType))
            {
                timerBoundaryEvent.TimerDefinitionType = parsedDefinitionType;
            }
            else
            {
                throw new InvalidElementException($"{xTimerDefinitionType.Value} is not a valid timer definition type at " +
                                                  $"line {ContractParser.GetLineNumber(xTimerDefinitionType)}");
            }

            var xTimerDefinition = xElement.Element("Definition");

            if (xTimerDefinition == null)
            {
                throw new InvalidElementException($"Timer event at line {ContractParser.GetLineNumber(xElement)} " +
                                                  $"is missing timer definition");
            }
            timerBoundaryEvent.TimerDefinition = xTimerDefinition.Value;

            return(timerBoundaryEvent);
        }
        public void Convert()
        {
            var contract          = ContractParser.FromDasFile("C:\\Users\\Johny\\Downloads\\mortgage.dascontract");
            var contractConverter = new ContractConverter(contract);

            contractConverter.ConvertContract();
            File.WriteAllText("C:\\Users\\Johny\\Downloads\\mortgage.sol", contractConverter.GetSolidityCode());
        }
Example #4
0
        public void GivenValidFilePath_AndValidContent_ThenFileIsParsed()
        {
            var contractParser     = new ContractParser();
            var contractDefinition = contractParser.ParseFile("./TestFiles/website-api.json");

            Assert.That(contractDefinition, Is.Not.Null);
            Assert.That(contractDefinition.Consumer, Is.EqualTo("website"));
            Assert.That(contractDefinition.Provider, Is.EqualTo("api"));
            Assert.That(contractDefinition.Contracts.Count(), Is.Not.EqualTo(0));
        }
Example #5
0
        public void GivenValidFilePath_WhenFileIsPactSpecification_AndValidContent_ThenFileIsParsed()
        {
            var contractParser     = new ContractParser();
            var contractDefinition = contractParser.ParseFile("./TestFiles/pact-specification.json", true);

            Assert.That(contractDefinition, Is.Not.Null);
            Assert.That(contractDefinition.Consumer, Is.EqualTo("website"));
            Assert.That(contractDefinition.Provider, Is.EqualTo("api"));
            Assert.That(contractDefinition.Contracts.Count(), Is.EqualTo(1));
        }
        /// <summary>
        /// Serializes the request.
        /// </summary>
        /// <typeparam name="TService">The type of the service.</typeparam>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public byte[] SerializeRequest <TService>(Request request)
        {
            var methodKey = ContractParser <TService> .GetMethodKey(request.Method);

            JObject message = new JObject();

            message[methodKey] = new JObject();
            for (int i = 0; i < request.Args.Count; i++)
            {
                message[methodKey][i.ToString()] = JToken.FromObject(request.Args[i]);
            }

            return(Encoding.UTF8.GetBytes(message.ToString()));
        }
Example #7
0
        static string GetAttachedToElement(XElement xElement, bool mandatory = true)
        {
            var xAttachedTo = xElement.Element("AttachedTo");

            if (xAttachedTo != null)
            {
                return(xAttachedTo.Value);
            }
            if (mandatory)
            {
                throw new InvalidElementException($"Element at line {ContractParser.GetLineNumber(xElement)} " +
                                                  $"is missing attached to definition");
            }
            return(null);
        }
Example #8
0
        static CallActivity CreateCallActivity(XElement xElement)
        {
            var callActivity = new CallActivity();

            FillCommonTaskAttributes(callActivity, xElement);

            var xCalledElement = xElement.Element("CalledElement");

            if (xCalledElement == null)
            {
                throw new InvalidElementException($"CallActivity at line {ContractParser.GetLineNumber(xElement)} " +
                                                  $"is missing called element definition");
            }
            callActivity.CalledElement = xCalledElement.Value;

            return(callActivity);
        }
        /// <summary>
        /// Deserializes the request.
        /// </summary>
        /// <typeparam name="TService">The type of the service.</typeparam>
        /// <param name="serializedRequest">The serialized request.</param>
        /// <returns></returns>
        public Request DeserializeRequest <TService>(byte[] serializedRequest)
        {
            var stringMessage = Encoding.UTF8.GetString(serializedRequest);

            JObject message    = JObject.Parse(stringMessage);
            var     properties = message.Properties();
            var     key        = message.Properties().FirstOrDefault().Name;

            var method = ContractParser <TService> .GetMethod(key);

            object[] args = message.Value <JObject>(key)
                            .Properties()
                            .OrderBy(x => int.Parse(x.Name))
                            .Select(x => x.Value.ToObject(ContractParser <TService> .GetPropertyType(key, x.Name)))
                            .ToArray();

            return(new Request(method, args));
        }
Example #10
0
        static SequenceFlow CreateSequenceFlow(XElement xSequenceFlow)
        {
            var sequenceFlow = new SequenceFlow();

            var xIdElement     = xSequenceFlow.Element("Id");
            var xNameElement   = xSequenceFlow.Element("Name");
            var xSourceElement = xSequenceFlow.Element("SourceId");
            var xTargetElement = xSequenceFlow.Element("TargetId");

            if (xIdElement != null)
            {
                sequenceFlow.Id = xIdElement.Value;
            }
            else
            {
                throw new InvalidElementException($"Sequence flow at line {ContractParser.GetLineNumber(xSequenceFlow)} is missing an ID");
            }

            if (xSourceElement != null)
            {
                sequenceFlow.SourceId = xSourceElement.Value;
            }
            else
            {
                throw new InvalidElementException($"Sequence flow at line {ContractParser.GetLineNumber(xSequenceFlow)} is missing a source");
            }

            if (xTargetElement != null)
            {
                sequenceFlow.TargetId = xTargetElement.Value;
            }
            else
            {
                throw new InvalidElementException($"Sequence flow at line {ContractParser.GetLineNumber(xSequenceFlow)} is missing a target");
            }

            if (xNameElement != null)
            {
                sequenceFlow.Name      = xNameElement.Value;
                sequenceFlow.Condition = xNameElement.Value;
            }
            return(sequenceFlow);
        }
Example #11
0
        static void FillCommonTaskAttributes(Task task, XElement xElement)
        {
            FillCommonProcessElementAttributes(task, xElement);

            var xInstanceType = xElement.Element("InstanceType");

            if (xInstanceType == null)
            {
                task.InstanceType = InstanceType.Single;
            }
            else if (Enum.TryParse(xInstanceType.Value, out InstanceType parsedInstanceType))
            {
                task.InstanceType = parsedInstanceType;
            }
            else
            {
                throw new InvalidElementException($"{xInstanceType.Value} is not a valid instance type value at line" +
                                                  $"{ContractParser.GetLineNumber(xInstanceType)}");
            }

            var xLoopCardinality = xElement.Element("LoopCardinality");

            if (xLoopCardinality != null)
            {
                if (int.TryParse(xLoopCardinality.Value, out var parsedLoopCardinality))
                {
                    task.LoopCardinality = parsedLoopCardinality;
                }
                else
                {
                    throw new InvalidElementException($"loop cardinality at {ContractParser.GetLineNumber(xInstanceType)} " +
                                                      $"must be an integer");
                }
            }

            var xLoopCollection = xElement.Element("LoopCollection");

            if (xLoopCollection != null)
            {
                task.LoopCollection = xLoopCollection.Value;
            }
        }
Example #12
0
        static void FillCommonPayableTaskAttributes(PayableTask payableTask, XElement xElement)
        {
            FillCommonTaskAttributes(payableTask, xElement);

            var xTokenOperationType = xElement.Element("OperationType");

            if (xTokenOperationType == null)
            {
                payableTask.OperationType = TokenOperationType.None;
            }
            else if (Enum.TryParse(xTokenOperationType.Value, out TokenOperationType parsedTokenOperationType))
            {
                payableTask.OperationType = parsedTokenOperationType;
            }
            else
            {
                throw new InvalidElementException($"{xTokenOperationType.Value} is not a valid token operation type value at line" +
                                                  $"{ContractParser.GetLineNumber(xTokenOperationType)}");
            }
        }
Example #13
0
        static string GetProcessId(XElement xElement)
        {
            var xIdElement = xElement.Element("Id");

            if (xIdElement == null)
            {
                throw new InvalidElementException($"Id not set for process element on line {ContractParser.GetLineNumber(xElement)}");
            }
            return(xIdElement.Value);
        }
Example #14
0
        static ProcessElement CreateProcessElement(XElement xElement)
        {
            ProcessElement processElement;
            var            xElementAttribute = xElement.Attribute(XMLNS + "type");

            if (xElementAttribute == null)
            {
                throw new InvalidElementException($"Mandatory attribute for a process element not found at line {ContractParser.GetLineNumber(xElement)}");
            }

            switch (xElementAttribute.Value)
            {
            case "ContractBusinessRuleTask":
                processElement = CreateBusinessRuleTask(xElement);
                break;

            case "ContractScriptActivity":
                processElement = CreateScriptTask(xElement);
                break;

            case "ContractServiceActivity":
                processElement = CreateServiceTask(xElement);
                break;

            case "ContractUserActivity":
                processElement = CreateUserTask(xElement);
                break;

            case "ContractStartEvent":
                processElement = CreateStartEvent(xElement);
                break;

            case "ContractEndEvent":
                processElement = CreateEndEvent(xElement);
                break;

            case "ContractExclusiveGateway":
                processElement = CreateExclusiveGateway(xElement);
                break;

            case "ContractParallelGateway":
                processElement = CreateParallelGateway(xElement);
                break;

            case "ContractTimerBoundaryEvent":
                processElement = CreateTimeBoundaryEvent(xElement);
                break;

            case "ContractCallActivity":
                processElement = CreateCallActivity(xElement);
                break;

            default:
                throw new InvalidElementException($"{xElementAttribute.Value} is not a valid process element type at line {ContractParser.GetLineNumber(xElement)}");
            }



            return(processElement);
        }
Example #15
0
 public void SetUp()
 {
     contract = ContractParser.Parse(CorrectContractTableLine.Split(','));
     parser   = () => ContractParser.Parse(invalidContractRow.Split(','));
 }