@@ -2028,4 +2028,83 @@ mod custom_types {
20282028 } ,
20292029 ] ) ;
20302030 }
2031+
2032+ #[ test]
2033+ fn exact_version_with_equals_prefix_should_be_fixable_when_semver_group_requires_caret ( ) {
2034+ // Reproduces issue #239
2035+ // User has semverGroups with range "^" but dependency uses =9.0.0 (npm's equals prefix)
2036+ // This should be marked as fixable (needs ^ prefix added)
2037+ let ctx = TestBuilder :: new ( )
2038+ . with_packages ( vec ! [ json!( {
2039+ "name" : "pkg-a" ,
2040+ "version" : "1.0.0" ,
2041+ "dependencies" : {
2042+ "react" : "=9.0.0"
2043+ }
2044+ } ) ] )
2045+ . with_config ( json ! ( {
2046+ "semverGroups" : [ {
2047+ "range" : "^"
2048+ } ]
2049+ } ) )
2050+ . build_and_visit_packages ( ) ;
2051+
2052+ expect ( & ctx) . to_have_instances ( vec ! [
2053+ ExpectedInstance {
2054+ state: InstanceState :: valid( IsLocalAndValid ) ,
2055+ dependency_name: "pkg-a" ,
2056+ id: "pkg-a in /version of pkg-a" ,
2057+ actual: "1.0.0" ,
2058+ expected: Some ( "1.0.0" ) ,
2059+ overridden: None ,
2060+ } ,
2061+ ExpectedInstance {
2062+ state: InstanceState :: fixable( SemverRangeMismatch ) ,
2063+ dependency_name: "react" ,
2064+ id: "react in /dependencies of pkg-a" ,
2065+ actual: "=9.0.0" ,
2066+ expected: Some ( "^9.0.0" ) ,
2067+ overridden: None ,
2068+ } ,
2069+ ] ) ;
2070+ }
2071+
2072+ #[ test]
2073+ fn exact_version_without_prefix_should_be_fixable_when_semver_group_requires_caret ( ) {
2074+ // Also test plain exact versions like "9.0.0" (without =)
2075+ // These should also be flagged when semver group requires ^
2076+ let ctx = TestBuilder :: new ( )
2077+ . with_packages ( vec ! [ json!( {
2078+ "name" : "pkg-a" ,
2079+ "version" : "1.0.0" ,
2080+ "dependencies" : {
2081+ "react" : "9.0.0"
2082+ }
2083+ } ) ] )
2084+ . with_config ( json ! ( {
2085+ "semverGroups" : [ {
2086+ "range" : "^"
2087+ } ]
2088+ } ) )
2089+ . build_and_visit_packages ( ) ;
2090+
2091+ expect ( & ctx) . to_have_instances ( vec ! [
2092+ ExpectedInstance {
2093+ state: InstanceState :: valid( IsLocalAndValid ) ,
2094+ dependency_name: "pkg-a" ,
2095+ id: "pkg-a in /version of pkg-a" ,
2096+ actual: "1.0.0" ,
2097+ expected: Some ( "1.0.0" ) ,
2098+ overridden: None ,
2099+ } ,
2100+ ExpectedInstance {
2101+ state: InstanceState :: fixable( SemverRangeMismatch ) ,
2102+ dependency_name: "react" ,
2103+ id: "react in /dependencies of pkg-a" ,
2104+ actual: "9.0.0" ,
2105+ expected: Some ( "^9.0.0" ) ,
2106+ overridden: None ,
2107+ } ,
2108+ ] ) ;
2109+ }
20312110}
0 commit comments