public static string GetSampleData(CProtoMessageField childField, COperationIs operationIs) { var dataType = SqlMapper.SqlDbTypeToDbType(SqlMapper.GrpcTypeToSqlDbType(childField.FieldType)); var isIdentity = false; var isForeignKey = false; if (childField.DerivedFrom is CColumn) { var column = childField.DerivedFrom as CColumn; isIdentity = column.IsIdentity; dataType = column.ColumnType; } else if (childField.DerivedFrom is CStoredProcedureParameter) { var parameter = childField.DerivedFrom as CStoredProcedureParameter; isIdentity = parameter.SourceColumn.IsIdentity; isForeignKey = parameter.SourceColumn.ForeignKeyColumn.Count > 0; dataType = parameter.ParameterType; } if (isForeignKey && dataType == DbType.Int64) { return("_currentDbIdentityValue"); } if (isForeignKey && dataType == DbType.Int32) { return("_currentDbIdentityValue"); } if (isIdentity) { if (operationIs == COperationIs.Update) { return("_currentDbIdentityValue"); } else { return("0"); } } if (_sampleData.ContainsKey(childField.FieldName)) { return(LookupSample(childField)); } var sampleData = GenerateSampleData(dataType); _sampleData.Add(childField.FieldName, sampleData); return(sampleData); }
private CMethod GetTestMethod(CProtoRpc rpc, COperationIs operationIs) { if (rpc.OperationIs.HasFlag(COperationIs.Bulk)) { return(null); } var codeWriter = new CodeWriter(); var methodName = $"{rpc.RpcName}"; if (operationIs == COperationIs.Add) { methodName += "Add"; } else if (operationIs == COperationIs.Update) { methodName += "Update"; } var method = new CMethod { MethodIs = operationIs, DerivedFrom = rpc, ReturnType = "Task", IsAsync = true, IsStatic = false, MethodName = methodName, Parameter = new List <CParameter> { new CParameter { Type = $"{rpc.ProtoService.ServiceName}.{rpc.ProtoService.ServiceName}Client", ParameterName = "client" } } }; //method.Attribute.Add(new SMethodAttribute { AttributeName = "TestMethod" }); codeWriter.WriteLine("//Arrange"); codeWriter.WriteLine(string.Empty); codeWriter.WriteLine($"var request = new {rpc.Request.MessageName}();"); if (!rpc.OperationIs.HasFlag(COperationIs.Bulk)) //ignore, for now { foreach (var field in rpc.Request.ProtoField) { if (field.FieldType == GrpcType.__enum) { var childEnum = rpc.ProtoService.ProtoFile.ProtoEnum.First(pm => pm.EnumName.ToLower() == field.EnumType.ToLower()); } else if (field.FieldType == GrpcType.__map) { //todo: } else if (field.FieldType == GrpcType.__message) { var childMessage = rpc.ProtoService.ProtoFile.ProtoMessage.First(pm => pm.MessageName.ToLower() == field.MessageType.ToLower()); if (!field.Repeated) { codeWriter.WriteLine($"request.{field.FieldName} = new {field.FieldName}();"); foreach (var childField in childMessage.ProtoField) { if (childField.IsScalar && !childField.Repeated) { codeWriter.WriteLine( $"request.{field.FieldName}.{childField.FieldName} = {SampleDataService.GetSampleData(childField, operationIs)}; "); } else if (childField.IsScalar && childField.Repeated) { codeWriter.WriteLine( $"request.{field.FieldName}.{childField.FieldName}.Add({SampleDataService.GetSampleData(childField, operationIs)}); "); } } } else { codeWriter.WriteLine($"var {field.FieldName.ToLower()} = new {field.MessageType}();"); foreach (var childField in childMessage.ProtoField) { if (childField.IsScalar && !childField.Repeated) { codeWriter.WriteLine( $"{field.FieldName.ToLower()}.{childField.FieldName} = {SampleDataService.GetSampleData(childField, operationIs)}; "); } else if (childField.IsScalar && childField.Repeated) { codeWriter.WriteLine( $"{field.FieldName.ToLower()}.{childField.FieldName}.Add({SampleDataService.GetSampleData(childField, operationIs)}); "); } } codeWriter.WriteLine($"request.{field.FieldName}.Add({field.FieldName.ToLower()});"); } } else { if (field.Repeated) { codeWriter.WriteLine( $"request.{field.FieldName}.Add({SampleDataService.GetSampleData(field, operationIs)}); "); } else { if (rpc.DerivedFrom is CStoredProcedure && (rpc.DerivedFrom as CStoredProcedure).DataOperationIs.HasFlag(COperationIs.Delete)) { if (field.FieldType == GrpcType.__int64 || field.FieldType == GrpcType.__int32) { codeWriter.WriteLine($"request.{field.FieldName} = _currentDbIdentityValue;"); } else { codeWriter.WriteLine( $"request.{field.FieldName} = {SampleDataService.GetSampleData(field, operationIs)};"); } } else { codeWriter.WriteLine( $"request.{field.FieldName} = {SampleDataService.GetSampleData(field, operationIs)}; "); } } } } } codeWriter.WriteLine(string.Empty); codeWriter.WriteLine("//Act"); codeWriter.WriteLine(string.Empty); codeWriter.WriteLine($"var response = await client.{rpc.RpcName}Async(request);"); codeWriter.WriteLine(string.Empty); //codeWriter.WriteLine("//Assert"); if (rpc.ResponseIsList()) { codeWriter.WriteLine($"Console.BackgroundColor = ConsoleColor.DarkGreen;"); codeWriter.WriteLine( $@"Console.WriteLine($""{{response.{rpc.Response.ProtoField.First().FieldName}.Count}} {rpc.Response.ProtoField.First().FieldName} records returned"");"); } else { codeWriter.WriteLine($"Console.BackgroundColor = ConsoleColor.DarkGreen;"); foreach (var field in rpc.Response.ProtoField) { codeWriter.WriteLine( $@"Console.WriteLine($""{{response.{field.FieldName}}}"");"); } } //codeWriter.WriteLine(string.Empty); // codeWriter.WriteLine($@"Assert.Fail(""{method.MethodName}() test is not implemented"");"); method.CodeSnippet = codeWriter.ToString(); return(method); }