Skip to content

Commit b107cb3

Browse files
committed
Add test cases including various app settings format
1 parent d6005de commit b107cb3

1 file changed

Lines changed: 267 additions & 0 deletions

File tree

UserSecretsExtension.Test/UserSecretsExtensionStartupFilterTests.cs

Lines changed: 267 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -398,4 +398,271 @@ public void MergeJsonStrings_MixedDataTypes_HandlesAllTypes()
398398
""";
399399
result.Is(expected);
400400
}
401+
402+
[Test]
403+
public void MergeJsonStrings_ColonDelimitedKeyInOverride_ExpandsToHierarchy()
404+
{
405+
// Arrange
406+
var baseJson = """
407+
{
408+
"Foo": {
409+
"Bar": "Hello"
410+
}
411+
}
412+
""";
413+
var overrideJson = """
414+
{
415+
"Foo:Bar": "World"
416+
}
417+
""";
418+
419+
// Act
420+
var result = UserSecretsExtensionStartupFilter.MergeJsonStrings(baseJson, overrideJson);
421+
422+
// Assert
423+
var expected = """
424+
{
425+
"Foo": {
426+
"Bar": "World"
427+
}
428+
}
429+
""";
430+
result.Is(expected);
431+
}
432+
433+
[Test]
434+
public void MergeJsonStrings_ColonDelimitedKeyInBase_ExpandsToHierarchy()
435+
{
436+
// Arrange
437+
var baseJson = """
438+
{
439+
"Foo:Bar": "Hello"
440+
}
441+
""";
442+
var overrideJson = """
443+
{
444+
"Foo": {
445+
"Bar": "World"
446+
}
447+
}
448+
""";
449+
450+
// Act
451+
var result = UserSecretsExtensionStartupFilter.MergeJsonStrings(baseJson, overrideJson);
452+
453+
// Assert
454+
var expected = """
455+
{
456+
"Foo": {
457+
"Bar": "World"
458+
}
459+
}
460+
""";
461+
result.Is(expected);
462+
}
463+
464+
[Test]
465+
public void MergeJsonStrings_BothColonDelimited_ExpandsToHierarchy()
466+
{
467+
// Arrange
468+
var baseJson = """
469+
{
470+
"Foo:Bar": "Hello"
471+
}
472+
""";
473+
var overrideJson = """
474+
{
475+
"Foo:Bar": "World"
476+
}
477+
""";
478+
479+
// Act
480+
var result = UserSecretsExtensionStartupFilter.MergeJsonStrings(baseJson, overrideJson);
481+
482+
// Assert
483+
var expected = """
484+
{
485+
"Foo": {
486+
"Bar": "World"
487+
}
488+
}
489+
""";
490+
result.Is(expected);
491+
}
492+
493+
[Test]
494+
public void MergeJsonStrings_DeepColonDelimitedKey_ExpandsToDeepHierarchy()
495+
{
496+
// Arrange
497+
var baseJson = """
498+
{
499+
"Database": {
500+
"Connection": {
501+
"Host": "localhost"
502+
}
503+
}
504+
}
505+
""";
506+
var overrideJson = """
507+
{
508+
"Database:Connection:Port": "5433"
509+
}
510+
""";
511+
512+
// Act
513+
var result = UserSecretsExtensionStartupFilter.MergeJsonStrings(baseJson, overrideJson);
514+
515+
// Assert
516+
var expected = """
517+
{
518+
"Database": {
519+
"Connection": {
520+
"Host": "localhost",
521+
"Port": "5433"
522+
}
523+
}
524+
}
525+
""";
526+
result.Is(expected);
527+
}
528+
529+
[Test]
530+
public void MergeJsonStrings_MultipleColonDelimitedKeys_ExpandsAllToHierarchy()
531+
{
532+
// Arrange
533+
var baseJson = """
534+
{
535+
"Foo": {
536+
"Bar": "Hello",
537+
"Baz": "Original"
538+
}
539+
}
540+
""";
541+
var overrideJson = """
542+
{
543+
"Foo:Bar": "World",
544+
"Foo:Qux": "New"
545+
}
546+
""";
547+
548+
// Act
549+
var result = UserSecretsExtensionStartupFilter.MergeJsonStrings(baseJson, overrideJson);
550+
551+
// Assert
552+
var expected = """
553+
{
554+
"Foo": {
555+
"Bar": "World",
556+
"Baz": "Original",
557+
"Qux": "New"
558+
}
559+
}
560+
""";
561+
result.Is(expected);
562+
}
563+
564+
[Test]
565+
public void MergeJsonStrings_ColonDelimitedKeyCreatesNewBranch_CreatesHierarchy()
566+
{
567+
// Arrange
568+
var baseJson = """
569+
{
570+
"Existing": "value"
571+
}
572+
""";
573+
var overrideJson = """
574+
{
575+
"New:Nested:Key": "value"
576+
}
577+
""";
578+
579+
// Act
580+
var result = UserSecretsExtensionStartupFilter.MergeJsonStrings(baseJson, overrideJson);
581+
582+
// Assert
583+
var expected = """
584+
{
585+
"Existing": "value",
586+
"New": {
587+
"Nested": {
588+
"Key": "value"
589+
}
590+
}
591+
}
592+
""";
593+
result.Is(expected);
594+
}
595+
596+
[Test]
597+
public void MergeJsonStrings_ColonDelimitedKeyReplacesObject_ReplacesWithScalar()
598+
{
599+
// Arrange
600+
var baseJson = """
601+
{
602+
"Foo": {
603+
"Bar": {
604+
"Nested": "value"
605+
}
606+
}
607+
}
608+
""";
609+
var overrideJson = """
610+
{
611+
"Foo:Bar": "SimpleValue"
612+
}
613+
""";
614+
615+
// Act
616+
var result = UserSecretsExtensionStartupFilter.MergeJsonStrings(baseJson, overrideJson);
617+
618+
// Assert
619+
var expected = """
620+
{
621+
"Foo": {
622+
"Bar": "SimpleValue"
623+
}
624+
}
625+
""";
626+
result.Is(expected);
627+
}
628+
629+
[Test]
630+
public void MergeJsonStrings_MixedColonAndRegularKeys_MergesCorrectly()
631+
{
632+
// Arrange
633+
var baseJson = """
634+
{
635+
"Regular": "value1",
636+
"Nested": {
637+
"Key": "value2"
638+
}
639+
}
640+
""";
641+
var overrideJson = """
642+
{
643+
"Regular": "updated",
644+
"Nested:Key": "overridden",
645+
"Another:Deep:Key": "new"
646+
}
647+
""";
648+
649+
// Act
650+
var result = UserSecretsExtensionStartupFilter.MergeJsonStrings(baseJson, overrideJson);
651+
652+
// Assert
653+
var expected = """
654+
{
655+
"Regular": "updated",
656+
"Nested": {
657+
"Key": "overridden"
658+
},
659+
"Another": {
660+
"Deep": {
661+
"Key": "new"
662+
}
663+
}
664+
}
665+
""";
666+
result.Is(expected);
667+
}
401668
}

0 commit comments

Comments
 (0)