Browse Source

Merge pull request #24877 from abpframework/fix/js-proxy-namespace-mismatch

fix: Resolve JS proxy namespace mismatch for multi-segment company names
pull/24883/head
İsmail ÇAĞDAŞ 8 months ago
committed by GitHub
parent
commit
9a363d3cf8
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 17
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenamer.cs
  2. 87
      framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenamer_Tests.cs

17
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenamer.cs

@ -1,5 +1,6 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
@ -41,7 +42,7 @@ public class SolutionRenamer
if (_companyName != null)
{
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder, _companyName);
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToCamelCase(), _companyName.ToCamelCase());
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToCamelCase(), ToCamelCaseWithNamespace(_companyName));
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToKebabCase(), _companyName.ToKebabCase());
RenameHelper.RenameAll(_entries, _companyNamePlaceHolder.ToLowerInvariant(), _companyName.ToLowerInvariant());
}
@ -55,9 +56,19 @@ public class SolutionRenamer
}
RenameHelper.RenameAll(_entries, _projectNamePlaceHolder, _projectName);
RenameHelper.RenameAll(_entries, _projectNamePlaceHolder.ToCamelCase(), _projectName.ToCamelCase());
RenameHelper.RenameAll(_entries, _projectNamePlaceHolder.ToCamelCase(), ToCamelCaseWithNamespace(_projectName));
RenameHelper.RenameAll(_entries, _projectNamePlaceHolder.ToKebabCase(), _projectName.ToKebabCase());
RenameHelper.RenameAll(_entries, _projectNamePlaceHolder.ToLowerInvariant(), _projectName.ToLowerInvariant());
RenameHelper.RenameAll(_entries, _projectNamePlaceHolder.ToSnakeCase().ToUpper(), _projectName.ToSnakeCase().ToUpper());
}
private static string ToCamelCaseWithNamespace(string name)
{
if (name.Contains('.'))
{
return name.Split('.').Select(n => n.ToCamelCase()).JoinAsString(".");
}
return name.ToCamelCase();
}
}

87
framework/test/Volo.Abp.Cli.Core.Tests/Volo/Abp/Cli/ProjectBuilding/Building/Steps/SolutionRenamer_Tests.cs

@ -0,0 +1,87 @@
using Shouldly;
using System.Collections.Generic;
using System.Reflection;
using Volo.Abp.Cli.ProjectBuilding.Files;
using Xunit;
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps;
public class SolutionRenamer_Tests
{
[Theory]
[InlineData("Demo", "demo")]
[InlineData("MyCompany", "myCompany")]
[InlineData("Acme", "acme")]
[InlineData("ABC", "aBC")]
public void ToCamelCaseWithNamespace_Should_Handle_Single_Segment_Names(string input, string expected)
{
// Act
var result = InvokeToCamelCaseWithNamespace(input);
// Assert
result.ShouldBe(expected);
}
[Theory]
[InlineData("Demo.App", "demo.app")]
[InlineData("MyCompany.MyProject", "myCompany.myProject")]
[InlineData("Acme.Bookstore", "acme.bookstore")]
[InlineData("ABC.XYZ", "aBC.xYZ")]
public void ToCamelCaseWithNamespace_Should_Handle_Two_Segment_Names(string input, string expected)
{
// Act
var result = InvokeToCamelCaseWithNamespace(input);
// Assert
result.ShouldBe(expected);
}
[Theory]
[InlineData("Demo.App.QoL", "demo.app.qoL")]
[InlineData("MyCompany.MyProject.Module", "myCompany.myProject.module")]
[InlineData("Acme.Bookstore.Application", "acme.bookstore.application")]
[InlineData("A.B.C.D", "a.b.c.d")]
public void ToCamelCaseWithNamespace_Should_Handle_Multi_Segment_Names(string input, string expected)
{
// Act
var result = InvokeToCamelCaseWithNamespace(input);
// Assert
result.ShouldBe(expected);
}
[Theory]
[InlineData("", "")]
[InlineData("A", "a")]
[InlineData(".", ".")]
[InlineData("...", "...")]
public void ToCamelCaseWithNamespace_Should_Handle_Edge_Cases(string input, string expected)
{
// Act
var result = InvokeToCamelCaseWithNamespace(input);
// Assert
result.ShouldBe(expected);
}
[Fact]
public void ToCamelCaseWithNamespace_Should_Throw_On_Null_Input()
{
// Act & Assert
var exception = Should.Throw<System.Reflection.TargetInvocationException>(() => InvokeToCamelCaseWithNamespace(null));
exception.InnerException.ShouldBeOfType<System.NullReferenceException>();
}
/// <summary>
/// Helper method to invoke the private static ToCamelCaseWithNamespace method using reflection
/// </summary>
private static string InvokeToCamelCaseWithNamespace(string input)
{
var type = typeof(SolutionRenamer);
var method = type.GetMethod("ToCamelCaseWithNamespace", BindingFlags.NonPublic | BindingFlags.Static);
method.ShouldNotBeNull("ToCamelCaseWithNamespace method should exist");
return (string)method.Invoke(null, new object[] { input });
}
}
Loading…
Cancel
Save